SlideShare a Scribd company logo
1 of 90
Download to read offline
`
        UNIVERSITA DEGLI STUDI DI TRIESTE
                    `
             FACOLTA DI INGEGNERIA
          Corso di laurea specialistica in Ingegneria Informatica

                          Tesi di laurea in
                   Complementi di Reti di Calcolatori




Progetto e realizzazione di un sistema
per la caratterizzazione su larga scala
    dei codici JavaScript nel Web



 LAUREANDA                                           RELATORE
 Sara Zambon                           Chiar.mo Prof. Alberto Bartoli




                                                  CORRELATORE
                                                Ing. Eric Medvet




                  Anno Accademico 2008/2009
Ai miei genitori
Indice



1 Introduzione                                                                                                                  1

2 Script JavaScript frame e iframe                                                                                            3
  2.1 Stato attuale di sicurezza nel Web . . . . . . . . . .                   . . . . . . . .                 .   .   .   . 3
  2.2 Script . . . . . . . . . . . . . . . . . . . . . . . . . .               . . . . . . . .                 .   .   .   . 4
       2.2.1 L’elemento script . . . . . . . . . . . . . . .                   . . . . . . . .                 .   .   .   . 5
  2.3 JavaScript . . . . . . . . . . . . . . . . . . . . . . . .               . . . . . . . .                 .   .   .   . 5
       2.3.1 Le caratteristiche di JavaScript . . . . . . . .                  . . . . . . . .                 .   .   .   . 6
              2.3.1.1 Esempio di codice JavaScript . . . .                     . . . . . . . .                 .   .   .   . 6
  2.4 Frame . . . . . . . . . . . . . . . . . . . . . . . . . .                . . . . . . . .                 .   .   .   . 7
       2.4.1 L’elemento frame . . . . . . . . . . . . . . . .                  . . . . . . . .                 .   .   .   . 8
              2.4.1.1 Esempio di un documento composto                         da tre frame                    .   .   .   . 8
  2.5 Inline Frame . . . . . . . . . . . . . . . . . . . . . .                 . . . . . . . .                 .   .   .   . 9
       2.5.1 L’elemento iframe . . . . . . . . . . . . . . .                   . . . . . . . .                 .   .   .   . 9
              2.5.1.1 Esempio di un iframe . . . . . . . .                     . . . . . . . .                 .   .   .   . 9
  2.6 Quesiti preliminari allo studio . . . . . . . . . . . . .                . . . . . . . .                 .   .   .   . 10
       2.6.1 I cinque quesiti . . . . . . . . . . . . . . . . .                . . . . . . . .                 .   .   .   . 12

3 Il dataset                                                                                                                   13
  3.1 Le fonti . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
       3.1.1 La fonte per le pagine Normal . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
             3.1.1.1 Alexa Top Sites . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
       3.1.2 La fonte per le pagine Malicious .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
             3.1.2.1 Malware Domain List . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
       3.1.3 La fonte per le pagine Interesting .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
  3.2 Metodologia di scaricamento delle pagine         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
       3.2.1 Definizioni generali . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
       3.2.2 Nostre definizioni . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
       3.2.3 Goldrake . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
  3.3 Dimensione complessiva del dataset . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17

                                            v
INDICE                                       vi


4 Metodologia di analisi                                                                                            19
  4.1 Suddivisione del dataset . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   19
      4.1.1 La tabella degli script . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   19
             4.1.1.1 Lo script: dalla pagina alla tabella       .   .   .   .   .   .   .   .   .   .   .   .   .   21
      4.1.2 La tabella dei frame e degli iframe . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   23
             4.1.2.1 L’iframe: dalla pagina alla tabella        .   .   .   .   .   .   .   .   .   .   .   .   .   24
  4.2 Analisi sugli script e sugli iframe . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
      4.2.1 Propriet` estratte dagli script . . . . . . . .
                       a                                        .   .   .   .   .   .   .   .   .   .   .   .   .   25
      4.2.2 Propriet` estratte dai frame e dagli iframe .
                       a                                        .   .   .   .   .   .   .   .   .   .   .   .   .   26

5 Offuscamento                                                                                                       27
  5.1 Definizione di offuscamento . . . . . . . . . . . . . . . . . . . . . . . .                             .   .   27
  5.2 Programmi atti all’offuscamento . . . . . . . . . . . . . . . . . . . . .                              .   .   28
  5.3 Programmi per offuscare codice JavaScript . . . . . . . . . . . . . . . .                              .   .   28
      5.3.1 Primo esempio di funzionamento di un JavaScript obfuscator .                                    .   .   29
      5.3.2 Secondo esempio di funzionamento di un JavaScript obfuscator                                    .   .   30
  5.4 JavaScript come veicolo di contenuti maligni . . . . . . . . . . . . . . .                            .   .   31
  5.5 Script JavaScript offuscati e maligni . . . . . . . . . . . . . . . . . . .                            .   .   32
  5.6 Eval, cardine nell’offuscamento automatico . . . . . . . . . . . . . . .                               .   .   34
      5.6.1 Funzioni alla base dell’offuscamento . . . . . . . . . . . . . . .                               .   .   34
             5.6.1.1 Semplice tecnica di deoffuscamento . . . . . . . . . .                                  .   .   34
      5.6.2 Alternative alla funzione eval() . . . . . . . . . . . . . . . . .                              .   .   34
  5.7 Esempi di codici offuscati . . . . . . . . . . . . . . . . . . . . . . . . .                           .   .   35
      5.7.1 Primo esempio . . . . . . . . . . . . . . . . . . . . . . . . . . .                             .   .   36
      5.7.2 Secondo esempio . . . . . . . . . . . . . . . . . . . . . . . . . .                             .   .   37
  5.8 Iframe invisibili e maligni . . . . . . . . . . . . . . . . . . . . . . . . .                         .   .   38
      5.8.1 Caratteristiche comuni ad iframe maligni . . . . . . . . . . . .                                .   .   38
  5.9 La nostra analisi sull’offuscamento . . . . . . . . . . . . . . . . . . . .                            .   .   39
      5.9.1 Propriet` offuscate degli script . . . . . . . . . . . . . . . . . .
                       a                                                                                    .   .   40
             5.9.1.1 Definizione di sequenza offuscata . . . . . . . . . . . .                                .   .   40
      5.9.2 Il concetto di propriet` offuscata . . . . . . . . . . . . . . . . .
                                     a                                                                      .   .   41
      5.9.3 Esempi di propriet` offuscate . . . . . . . . . . . . . . . . . . .
                                 a                                                                          .   .   42
             5.9.3.1 Funzioni con nome offuscato . . . . . . . . . . . . . .                                 .   .   42
             5.9.3.2 Varibili con nome offuscato . . . . . . . . . . . . . . .                               .   .   42
             5.9.3.3 Variabile con argomento offuscato . . . . . . . . . . .                                 .   .   44
             5.9.3.4 document.write() con argomento offuscato . . . . .                                      .   .   44
             5.9.3.5 iframe con argomento offuscato . . . . . . . . . . . .                                  .   .   44
             5.9.3.6 iframe invisibile . . . . . . . . . . . . . . . . . . . . .                            .   .   44
             5.9.3.7 Stringa con argomento offuscato . . . . . . . . . . . .                                 .   .   45
             5.9.3.8 Stringa lunga priva di punteggiatura . . . . . . . . . .                               .   .   45
             5.9.3.9 eval() con argomento offuscato . . . . . . . . . . . .                                  .   .   45
             5.9.3.10 unescape() con argomento offuscato . . . . . . . . .                                   .   .   46
      5.9.4 Il test con gli analisti . . . . . . . . . . . . . . . . . . . . . . . .                        .   .   46
vii                                                        INDICE


   5.10 Due criteri di offuscamento per gli script . . . . . . . . . . . . . . . . . . . 47

6 Analisi                                                                                                      51
  6.1 Caratterizzazione generale . . . . . . . . . . . . . . . . . . . . . .               .   .   .   .   .   51
      6.1.1 Caratterizzazione a livello pagina . . . . . . . . . . . . . .                 .   .   .   .   .   51
      6.1.2 Caratterizzazione a livello script . . . . . . . . . . . . . .                 .   .   .   .   .   53
  6.2 Inclusione di script da url diversi . . . . . . . . . . . . . . . . . .              .   .   .   .   .   53
  6.3 Massima profondit` di inclusione degli script . . . . . . . . . . .
                          a                                                                .   .   .   .   .   54
      6.3.1 Massima profondit` osservata a livello pagina . . . . . . .
                                 a                                                         .   .   .   .   .   54
      6.3.2 Massima profondit` osservata a livello script . . . . . . .
                                 a                                                         .   .   .   .   .   56
  6.4 Utilizzo di eval() . . . . . . . . . . . . . . . . . . . . . . . . . .               .   .   .   .   .   57
      6.4.1 Diffusione generale dell’utilizzo di eval() . . . . . . . . .                   .   .   .   .   .   57
      6.4.2 Diffusione dell’utilizzo di eval() con argomento lungo . .                      .   .   .   .   .   58
      6.4.3 Diffusione dell’utilizzo di eval() con argomento offuscato                       .   .   .   .   .   59
  6.5 Utilizzo di iframe sospettosamente piccoli . . . . . . . . . . . . .                 .   .   .   .   .   59
  6.6 Utilizzo di tecniche di offuscamento . . . . . . . . . . . . . . . . .                .   .   .   .   .   60
      6.6.1 Diffusione dell’utilizzo di unescape() . . . . . . . . . . .                    .   .   .   .   .   62
      6.6.2 Relazioni fra le features di offuscamento delle propriet` .  a                  .   .   .   .   .   63

7 Conclusioni e sviluppi futuri                                                                                65

A Il codice                                                                                                    69
  A.1 Oggetto PageAnalizer . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   69
       A.1.1 Metodi dell’oggetto PageAnalizer . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   69
  A.2 Oggetto ScriptAnalizer . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   70
       A.2.1 Metodi dell’oggetto ScriptAnalizer . . . . . .        .   .   .   .   .   .   .   .   .   .   .   70
  A.3 Oggetto FrameAndIframeAnalizer . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   71
       A.3.1 Metodi dell’oggetto FrameAndIframeAnalizer            .   .   .   .   .   .   .   .   .   .   .   71

Bibliografia e siti web consultati                                                                              73

Ringraziamenti                                                                                                 75
Elenco dei codici


 2.1    Esempio di codice JavaScript . . . . . . . . . . . . . . . . . . . . . . .       .   .    6
 2.2    Esempio di un documento composto da tre frame . . . . . . . . . . . .            .   .    8
 2.3    Esempio di un iframe . . . . . . . . . . . . . . . . . . . . . . . . . . . .     .   .    9
 4.1    Codice dello script . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    .   .   21
 4.2    Codice dello script . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    .   .   22
 4.3    Codice dell’iframe . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     .   .   24
 5.1    Frammento di codice JavaScript da offuscare . . . . . . . . . . . . . .           .   .   29
 5.2    Stesso frammento di codice JavaScript dopo l’offuscamento . . . . . .             .   .   29
 5.3    Frammento di codice JavaScript da offuscare . . . . . . . . . . . . . .           .   .   30
 5.4    Stesso frammento di codice JavaScript dopo l’offuscamento . . . . . .             .   .   31
 5.5    Codice dello script presente nelle pagine infette . . . . . . . . . . . . .      .   .   33
 5.6    Creazione dinamica di una variabile tramite la funzione eval() . . . .           .   .   35
 5.7    Creazione dinamica di una variabile tramite l’oggetto window . . . . .           .   .   35
 5.8    Codice dello script di terzo livello . . . . . . . . . . . . . . . . . . . . .   .   .   36
 5.9    Codice dello script di secondo livello . . . . . . . . . . . . . . . . . . .     .   .   36
 5.10   Codice dello script di primo livello . . . . . . . . . . . . . . . . . . . .     .   .   36
 5.11   Iframe dalle dimensioni nulle . . . . . . . . . . . . . . . . . . . . . . .      .   .   37
 5.12   Script puntato dal precedente iframe . . . . . . . . . . . . . . . . . . .       .   .   37
 5.13   Codice dello script deoffuscato . . . . . . . . . . . . . . . . . . . . . .       .   .   37
 5.14   Iframe reso invisibile dalle dimensioni nulle (width=0 e height=0). . .          .   .   38
 5.15   Iframe reso invisibile da un’unica dimesione nulla (height=0). . . . . .         .   .   38
 5.16   Iframe di dimensioni minime e dunque difficilmente percepibile. . . . .            .   .   39
 5.17   Iframe reso invisibile dall’attributo visibility:hidden. . . . . . . . .         .   .   39
 5.18   Iframe non visibile perch` interno a un “contenitore” <div> invisibile.
                                  e                                                      .   .   39
 5.19   Argomento offuscato di una variabile . . . . . . . . . . . . . . . . . . .        .   .   44
 5.20   Argomento offuscato di un document.write() . . . . . . . . . . . . .              .   .   44
 5.21   Argomento offuscato di un iframe . . . . . . . . . . . . . . . . . . . .          .   .   44
 5.22   iframe con gli attributi width e height nulli . . . . . . . . . . . . . .        .   .   44
 5.23   Argomento offuscato di una stringa . . . . . . . . . . . . . . . . . . . .        .   .   45
 5.24   Argomento offuscato di una stringa lunga . . . . . . . . . . . . . . . .          .   .   45

                                             ix
ELENCO DEI CODICI                        x


  5.25 Argomento offuscato di un eval() . . . . . . . . . . . . . . . . . . . . . . 45
  5.26 Argomento offuscato di un unescape() . . . . . . . . . . . . . . . . . . . 46
Elenco delle figure



 2.1   Finestra visualizzata grazie allo script . . . . . . . . . . . . . . . . . .   .   . 7
 2.2   Inserimento dei dati da inviare all’applicazione . . . . . . . . . . . . .     .   . 7
 2.3   Finestra che si apre a seguito dell’interazione fra utente e applicazione      .   . 7
 2.4   Pagina web composta da tre frame . . . . . . . . . . . . . . . . . . . .       .   . 9
 2.5   Iframe ospitato all’interno di una pagina web . . . . . . . . . . . . . .      .   . 10

 4.1   Home page di Amazon visualizzata tramite un browser . . . . . . . . . . . 22

 5.1   Drive-by download a seguito di un attacco browser exploit . . . . . . . . . 40

 6.1  Grafici di distribuzione sul numero di script inclusi per pagina . . . . . . .         52
 6.2  Grafici di distribuzione cumulativa sulla somma delle dimensioni degli
      script per pagina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     52
 6.3 Grafici di distribuzione cumulativa sulla dimensione degli script in caratteri          53
 6.4 Grafici di distribuzione sull’inclusione di script da domini diversi . . . . .          54
 6.5 Grafici di distribuzione sulla massima profondit` senza redirezioni per il
                                                           a
      numero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      55
 6.6 Grafici di distribuzione sulla massima profondit` con redirezioni per il
                                                             a
      numero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      55
 6.7 Grafici di distribuzione sulla massima profondit` senza redirezioni per la
                                                           a
      percentuale di script calcolata sulla numero assoluto degli stessi . . . . . .        56
 6.8 Grafici di distribuzione sulla massima profondit` senza redirezioni per la
                                                           a
      percentuale di script calcolata sulla dimensione degli stessi . . . . . . . . .       57
 6.9 Grafico a barre sull’utilizzo di eval() . . . . . . . . . . . . . . . . . . . .         58
 6.10 Grafico a barre sull’utilizzo di eval() con argomento superiore a 140
      caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   58
 6.11 Grafico a barre sull’utilizzo di eval() con argomento offuscato . . . . . .             59
 6.12 Grafico di distribuzione sull’utilizzo di iframe con dimensioni minori di
      3px * 3px per la percentuale di pagine Normal . . . . . . . . . . . . . . .           60

                                            xi
ELENCO DELLE FIGURE                         xii


  6.13 Grafico a barre sulla percentuale di script offuscati ricavata tramite            il
       classificatore MLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      .   . 61
  6.14 Grafico a barre sulla percentuale di script offuscati ricavata tramite            il
       classificatore basato sulle soglie . . . . . . . . . . . . . . . . . . . . . .    .   .   61
  6.15 Grafico a barre sull’utilizzo di unescape() . . . . . . . . . . . . . . . .       .   .   62
  6.16 Grafico a barre sull’utilizzo di unescape() con argomento offuscato . .            .   .   62
  6.17 Matrice dei diagrammi di dispersione . . . . . . . . . . . . . . . . . . .       .   .   63
Elenco delle tabelle



 5.1   Propriet` e relative condizioni di offuscamento . . . . . . . . . . .
                a                                                                   .   .   .   .   43
 5.2   Percentuali di giudizi comuni associate agli script . . . . . . . . . .      .   .   .   .   48
 5.3   Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   49
 5.4   Soglie sulle features per il secondo bit di offuscamento dello script         .   .   .   .   50




                                           xiii
Capitolo                  1
Introduzione

Il Web ha subito una totale trasformazione, passando da semplice infrastruttura per
l’accesso a dati remoti a complesso sistema contraddistinto da una spiccata interazio-
ne con l’utente. I fruitori di servizi web sono quotidianamente subissati da contenuti
provenienti dai siti visitati. Tali contenuti spesso consistono in codice che dev’essere
eseguito sui sistemi client, operazione che ormai risulta essere essenziale per usufruire
delle funzionalit` di cui i moderni siti sono provvisti.
                 a
    Lo scenario che ne deriva pu` assumere connotati inquietanti in termini di sicurezza
                                   o
informatica. La navigazione fra le pagine di un affermato quotidiano online, solitamente
` percepita dall’utente come un’azione sicura. Ci` che forse ignora il visitatore ` che
e                                                     o                               e
il contenuto ricevuto spesso include una mix di codici provenienti da siti terzi, verso i
quali egli ripone la propria fiducia senza, tuttavia, esserne a conoscenza.
    Un’ulteriore insidia per l’inconsapevole utente ` rappresentata da contenuti invisibili,
                                                     e
di solito iframe, o comunque sfuggevoli alla vista, i quali, ad esempio, sono in grado di
inoltrare la navigazione verso siti poco raccomandabili se non addirittura diffusori di
software dannoso per il sistema dell’utente.
    Un altro aspetto cruciale in questo panorama ` rappresentato dall’offuscamento. I
                                                       e
contenuti inviati ai vari client possono comprendere anche frammenti di codice offuscato,
quindi codice deliberamente modificato al fine di renderne ardua l’analisi. Come verr`      a
meglio illustrato lungo questo elaborato, alla base dell’offuscamento del codice risiedo-
no obiettivi discrepanti: dalla protezione della paternit` del codice, all’occultazione di
                                                            a
contenuti maligni.
    Prima di iniziare l’intera trattazione, si propone un esempio che presenta uno scenario
in cui sono presenti tutti gli aspetti appena accennati. L’esempio ` tratto dal Google
                                                                        e
Technical Report [1] pubblicato nel 2008. All’interno di una pagina web, appartenente
ad un sito di una stazione radio olandese, durante la loro indagine, i ricercatori Google
rilevarono la presenza di un’inserzione pubblicitaria che rimandava ad un sito tedesco.
Tramite una porzione di codice JavaScript, l’utente veniva inoltrato verso un altro sito
pubblicitario negli Stati Uniti che a sua volta reindirizzava la navigazione verso i Paesi
Bassi. Il viaggio dell’utente procedeva fino ad un nuovo sito, sempre nella stessa zona, dal

                                             1
1. Introduzione                              2


quale veniva scaricato uno script offuscato che puntava ad un’ulteriore script localizzato
in Austria. Quest’ultimo indirizzava il browser dell’utente, tramite una catena di iframe,
verso il sito finale che provocava lo scaricamento automatico di sofware dannoso sul
sistema client.
    L’estrema rilevanza di questi fenomeni nel Web e le enormi dimensioni potenzialmen-
te raggiungibili dai loro effetti in termini di sicurezza, mettono in risalto l’importanza del
nostro lavoro di ricerca che ha avuto come obiettivo la caratterizzazione dei fatti citati.
Nel panorama odierno l’attenzione di cui essi godono ` talmente modesta da sottostimar-
                                                         e
ne l’importanza; infatti, ci sono ancora molte domande alle quali non ` stato risposto in
                                                                           e
maniera adeguata. Ad esempio, non si trovano studi che chiariscano quanto sia diffuso
l’utilizzo del codice offuscato all’interno delle pagine web o che relazione sussista, nel
caso ve ne sia una, fra offuscamento e pagine sospette oppure ancora se l’offuscamento si
riscontri pi` frequentemente nei codici inclusi da altri domini. Una conoscenza lacunosa
            u
avvolge anche questioni che sorgono attorno alla diffusione dell’impiego dei contenuti
invisibili precedentemente menzionati oppure di eval, una discussa funzione JavaScript,
potenzialmente in grado di compiere qualsiasi azione e per questo assisa al ruolo di musa
ispiratrice da una folta schiera di criminali informatici.
    Per tentare di fornire una risposta a queste domande, abbiamo scelto di condurre le
nostre analisi su un migliaio di pagine collezionate in maniera oculata al fine di ottenere
una plausibile rappresentazione del Web. Da ciascuna pagina abbiamo prelevato script,
frame e iframe contenuti nella pagina stessa o richiamati da fonti esterne, ottenendo di
conseguenza i tre elementi cardine della nostra indagine. Durante lo scaricamento delle
pagine, per ognuno dei tre elementi, oltre al puro codice, si ` tenuto traccia di tutti gli
                                                                e
URL attraversati per raggiungere effettivamente quel contenuto.
    Una volta completato l’intero download, abbiamo dato avvio al nostro studio estraen-
do da ciascun codice in nostro possesso un set di propriet` relative, ad esempio, alla defi-
                                                            a
nizione di funzioni da parte del programmatore, oppure all’utilizzo di particolari costrutti
o funzioni JavaScript. Analizzando e compiendo specifiche elaborazioni sui dati derivati
dallo scaricamento e su quelli estratti dai vari codici, abbiamo cercato di rispondere alle
domande iniziali.
Capitolo                      2
Script JavaScript frame e iframe

Il crescente aumento di applicazioni online che permettono uno spiccato livello d’in-
terazione con l’utente, come ad esempio blog, forum, chat e sistemi quali Wikipedia,
Youtube, Facebook, Myspace, Twitter, Gmail, Wordpress, Tripadvisor, ha portato con
s` l’inevitabile incremento dell’utilizzo di script, frammenti di codice che consentono
 e
concretamente l’interazione.
    L’utilizzo di queste tecniche nasconde purtoppo un rovescio della medaglia. Infatti,
se da un lato questi strumenti sono forieri di vantaggi notevoli, i quali hanno dato vita
a una nuova era per il Web, che viene definita 2.0 per marcare il confine tra l’accezione
statica precedente e quella dinamica attuale, dall’altro offrono nuovi mezzi per alcuni
tipi di attacchi informatici.
    Da queste considerazioni ha preso spunto la nostra attivit` di ricerca, la cui materia
                                                               a
d’indagine ` rappresentata da script JavaScript, frame e iframe.
            e
    Nella prima parte del capitolo, dopo una panoramica sulla situazione attuale in
termini di sicurezza informatica, si forniscono al lettore alcune definizioni introduttive
all’argomento; di seguito a questa, vengono esposti i quesiti attorno a script JavaScript,
frame e iframe, dai quali ha avuto origine l’intero studio.


2.1      Stato attuale di sicurezza nel Web
Prima di entrare nel vivo di script, frame e iframe, in questa sezione si elencano alcuni
fra i risultati della ricerca “Websense Security Labs, State of Internet Security, Q1-Q2
2009”[9], effettuata dall’azienda Websense1 sullo stato di sicurezza nel web e pubblicata
nel settembre 2009:
   1
     Websense, Inc.: azienda californiana che opera nel settore delle tecnologie integrate di protezione
Web, email e Dati. L’azienda produce soluzioni che mirano a bloccare i codici malevoli, a impedire la
perdita di informazioni confidenziali e a configurare policy di sicurezza sull’utilizzo di Internet. Ogni
ora Websense R Security LabsTM ThreatSeekerTM Network analizza oltre 40 milioni di siti Web e dieci
milioni di email per identificare contenuti indesiderati e malicious code.


                                                   3
2. Script JavaScript frame e iframe              4


   • Websense R Security LabsTM ha registrato una crescita del 233% del numero di
     siti Internet malicious nel corso degli ultimi sei mesi e una crescita del 671% di
     questi nell’ultimo anno;

   • nella prima met` del 2009, il 77% dei siti Web con malicious code erano costituiti
                      a
     da siti Internet affidabili che sono stati compromessi. Questa percentuale elevata `e
     stata causata in particolare negli ultimi sei mesi da alcuni attacchi quali Gumblar
     (vedi sezione 5.5 a pagina 32), Beladen e Nine Ball che hanno compromesso siti
     Web considerati altamente affidabili attraverso una serie di attacchi a catena;

   • i siti Web 2.0 che consentono contenuti generati dagli utenti finali sono un target
     importante per i cybercriminali e gli spammer. La tecnologia Websense DefensioTM
     ha consentito ai Websense R Security LabsTM di stabilire che il 95% dei commenti
     generati dagli utenti di blog, chat room e bacheche sono spam2 o malicious.

   • gli sforzi dei siti Web 2.0 di rendere le proprie pagine sicure sono risultati non
     efficaci. La ricerca Websense infatti dimostra che i tool di sicurezza utilizzati da
     siti quali YouTube e BlogSpot sono dal 65% al 75% inefficaci nel proteggere gli
     utenti Web da contenuti pericolosi e rischi relativi alla sicurezza.

   • il 69% di tutte le pagine Internet con contenuti classificati come inappropriati
     (contenuti pornografici, gioco d’azzardo, droghe) contenevano almeno un link ma-
     licious. Il dato diventa ancora pi` significativo con il 78% dei nuovi siti Internet
                                       u
     scoperti nella prima met` del 2009 che contiene almeno un link pericoloso;
                              a

   • Websense R Security LabsTM ha riscontrato che il 37% degli attacchi Web hanno
     l’obiettivo di sottrarre dati e informazioni personali fondamentali degli utenti;

   • il Web continua ad essere il vettore preferito per il furto di dati. Nella prima met`
                                                                                         a
     del 2009 i Websense Security Labs hanno constatato che il 57% degli attacchi che
     avevano come obiettivo il furto di dati erano stati condotti attraverso la Rete;

   • la convergenza di attacchi misti Web ed email continua a crescere. Secondo
     Websense R Security LabsTM , l’85,6% di tutta la posta indesiderata in circolazione
     contiene link a siti di spam e/o a siti Web pericolosi;

   • solamente a giugno il numero totale di email che contenevano virus ` cresciuta del
                                                                        e
     600% rispetto al mese precedente.


2.2     Script
Uno script lato client ` un programma che pu` accompagnare un documento HTML
                       e                        o
oppure essere incorporato direttamente in esso. Il programma viene eseguito sulla mac-
china client quando viene caricato il documento, o in un secondo tempo, per esempio
   2
     Spam: messaggi indesiderati generalmente a scopi pubblicitari. Con spamming si indica l’invio di
grandi quantit` di questo genere di messaggi solitamente tramite email.
              a
5                                         JavaScript


quando viene attivato un collegamento. Gli script offrono ai progettisti alcuni mezzi per
estendere i documenti HTML in maniera attiva e interattiva.
    Le caratteristiche di uno script possono essere cos` elencate:
                                                       ı

       • gli script possono essere attivati da eventi che coinvolgono il documento, come il
         caricamento, lo scaricamento, la focalizzazione di elementi, movimenti del mouse,
         e cos` via;
               ı

       • gli script possono essere collegati a controlli, come i bottoni, per produrre gli
         elementi di interfaccia;

       • gli script possono processare i dati appena vengono immessi dall’utente all’interno
         di form.

2.2.1       L’elemento script
Il tag <script> pone uno script all’interno di un documento. Gli attributi pricipali di
questo tag sono:

       • src: attributo che specifica la locazione di uno script esterno al documento, quindi
         l’URL3 tramite cui recuperare lo script; se l’attributo non ` impostato, il contenuto
                                                                     e
         dello script ` definito all’interno dell’elemento stesso;
                      e

       • type: attributo che specifica il linguaggio di scripting per il contenuto dell’elemen-
         to. Il linguaggio di scripting ` indicato come un tipo di contenuto (per esempio
                                        e
         type="text/javascript");

       • language: valore che contiene l’identificatore del linguaggio di scripting; poich´ gli
                                                                                         e
         identificatori non sono standard, questo attributo ` stato “disapprovato” in favore
                                                             e
         dell’attributo type.


2.3        JavaScript
JavaScript ` un linguaggio di scripting orientato agli oggetti4 comunemente utilizzato
            e
nei siti web.
    Fu originariamente sviluppato da Brendan Eich della Netscape Communications con
il nome di Mocha e successivamente di LiveScript, ma in seguito ` stato rinominato
                                                                    e
JavaScript ed ` stato formalizzato con una sintassi pi` vicina a quella del linguaggio
                e                                      u
Java di Sun Microsystems. JavaScript ` stato standardizzato per la prima volta tra il
                                       e
1997 e il 1999 dalla ECMA con il nome ECMAScript. L’ultimo standard, del dicembre
   3
      URL: Uniform Resource Locator, sequenza di caratteri che identifica univocamente l’indirizzo di una
risorsa in Internet.
    4
      Programmazione orientata agli oggetti: paradigma di programmazione che prevede di raggruppare
in un’unica entit` (la classe) sia le strutture dati che le procedure che operano su di esse, creando per
                  a
l’appunto un oggetto software dotato di propriet` (dati) e metodi (procedure) che operano sui dati dello
                                                  a
stesso.
2. Script JavaScript frame e iframe                 6

                                                                `
    1999, ` ECMA-262 Edition 3, e corrisponde a JavaScript 1.5. E anche uno standard
          e
    ISO.

    2.3.1     Le caratteristiche di JavaScript
    La caratteristica principale di JavaScript ` quella di essere un linguaggio interpretato.
                                                 e
    Il codice quindi non viene compilato bens` c’` un interprete (in JavaScript lato client
                                                 ı e
    esso ` incluso nel browser) che esegue riga per riga, a tempo di esecuzione, quanto
          e
    trascritto nello script. JavaScript presenta quindi tutte le caratteristiche di un normale
    linguaggio interpretato con una sintassi analoga a quella di un linguaggio compilato (essa
    ` relativamente simile a quella del C, del C++ e del Java), quindi con la possibilit` di
    e                                                                                       a
    utilizzare funzionalit` tipiche dei linguaggi di programmazione ad alto livello (strutture
                          a
    di controllo, cicli, ecc.) e con in pi` anche la potenzialit` di definire strutture pi`
                                            u                       a                          u
    complesse, vicine a quelle adottate nei normali linguaggi orientati agli oggetti (definizione
    di costruttori, creazione di prototipi, istanziazione di oggetti).
        Poich´ il linguaggio JavaScript non ha propri costrutti di input o output, un in-
              e
    terprete JavaScript si basa su un programma ospite in cui ` integrato. Ci sono molti
                                                                    e
    programmi ospiti di questo tipo, di cui quelli relativi al Web sono gli esempi pi` noti.
                                                                                        u
        JavaScript, se integrato in un web browser, si collega tramite interfacce DOM5 alle
    applicazioni, specialmente al lato server (web server) e al lato client (browser) delle
    applicazioni internet. Molti siti web usano la tecnologia JavaScript lato client per creare
    potenti applicazioni web dinamiche.
        Gli standard DOM imposti dal W3C6 non sempre vengono rispettati dai vari browser:
    browser diversi (anche a seconda del loro motore di rendering) espongono diversi oggetti
    o metodi allo script, quindi, ` spesso necessario implementare controlli aggiuntivi ad una
                                  e
    funzione JavaScript, per garantirne la compatibilit` con ciascun browser. La diversit`
                                                          a                                    a
    dei DOM dei browser pu` essere aggirata anche attraverso l’uso dell’istruzione eval().
                               o
    Questa funzione nativa valuta una stringa e la esegue come se fosse codice JavaScript.
        Un uso principale del JavaScript basato su web ` la scrittura di piccole funzioni
                                                             e
    integrate nelle pagine HTML che interagiscono con il DOM del browser per compiere
    determinate azioni non possibili con il solo HTML statico come ad esempio controllare
    i valori nei campi di input, creare finestre pop-up nascondere o visualizzare determinati
    elementi.

    2.3.1.1     Esempio di codice JavaScript

1   < script type = " text / javascript " >
       5
         DOM : Document Object Model, standard ufficiale di rappresentazione dei documenti strutturati
    come modello orientato agli oggetti.
       6
         W3C : World Wide Web Consortium, associazione fondata nel 1994 da Tim Berners Lee, padre del
    web, al MIT (Massachusetts Institute of Technology), in collaborazione con il CERN (Organizzazione
    Europea per la Ricerca Nucleare), con lo scopo di sviluppare tecnologie che garantiscano l’interoperabilit`
                                                                                                              a
    (specifiche, guidelines, software e applicazioni) per guidare il World Wide Web fino al massimo del suo
    potenziale.
7                                          Frame


2      function show_prompt () {
3        var name = prompt ( " Please enter your name " ," write here " ) ;
4        if ( name != null && name != " " ) {
5             alert ( " Hello " + name + " ! How are you today ? " ) ;
6          }
7      }
8   </ script >
                              Codice 2.1: Esempio di codice JavaScript




                          Figura 2.1: Finestra visualizzata grazie allo script




                     Figura 2.2: Inserimento dei dati da inviare all’applicazione




          Figura 2.3: Finestra che si apre a seguito dell’interazione fra utente e applicazione




    2.4     Frame
    Nelle pagine web si parla di frame quando una pagina ` scomposta in diverse sezioni
                                                           e
    tra loro indipendenti. Frame ` anche il nome del tag HTML che indica ognuna di tali
                                  e
    sezioni.
        I frame HTML permettono ai progettisti di presentare i documenti in visualizzazioni
    multiple, che possono essere finestre indipendenti o sotto finestre. Le visualizzazioni
2. Script JavaScript frame e iframe         8


     multiple offrono ai progettisti un modo per mantenere visibili certe informazioni, mentre
     altre visualizzazioni vengono fatte scorrere o rimpiazzate. Per esempio, all’interno della
     stessa finestra, un frame pu` visualizzare un banner statico, il secondo un men` di
                                    o                                                     u
     navigazione, e il terzo il documento principale che pu` essere fatto scorrere verso l’alto
                                                             o
     o verso il basso, o che pu` essere rimpiazzato navigando tramite il secondo frame (vedi
                                o
     Figura 2.4).
         L’obiettivo dei frame ` quello di evitare di dover riscrivere interamente ogni pagina
                                 e
     in tutte le sue componenti. Ci` risulta possibile suddividendo la pagina per lasciare
                                      o
     intatti, ad esempio, i frame con banner e men` e ricaricare solamente il contenuto del
                                                      u
     frame centrale, permettendo cos` di gestire una mole di codice nettamente minore.
                                      ı

     2.4.1     L’elemento frame
     Per poter creare una pagina con i frame viene utilizzato il tag HTML <frameset> che
     inizializza la struttura di una pagina con i frame.
         All’interno del tag <frameset> trova posto il tag <frame> i cui attributi principali
     sono:
        • id: identificativo del frame;
        • src: stringa che specifica quale pagina deve essere caricata all’interno del frame
          stesso.
        Gli attributi del tag <frameset> permettono di conferire le dimensioni ai frame e
     sono:
        • cols: valore che specifica la dimensione delle colonne di ogni frame;
        • rows: valore che specifica la dimensione delle righe di ogni frame;
     La struttura dei frame non necessita di trovarsi all’interno del tag HTML <body> ma
     deve essere inserita dopo il tag di chiusura </head>.

     2.4.1.1    Esempio di un documento composto da tre frame

 1   < html >
 2   < head >
 3   < title >A simple frameset document </ title >
 4   </ head >
 5   < frameset cols = " 20% ,80% " >
 6      < frameset rows = " 100 ,200 " >
 7            < frame src = " logoUnits . gif " >
 8            < frame src = " menu . html " >
 9      </ frameset >
10      < frame src = " http :// www . inginf . units . it / Home " >
11   </ frameset >
12   </ html >
                     Codice 2.2: Esempio di un documento composto da tre frame
9                                Inline Frame




                          Figura 2.4: Pagina web composta da tre frame



    2.5       Inline Frame
    Iframe sta per Inline frame e permette di inserire un frame anche in una pagina non
    strutturata in frame. A tale scopo ` sufficiente servirsi del tag <iframe>.
                                       e

    2.5.1     L’elemento iframe
    I principali attributi dell’elemento iframe sono:
       • width: valore che specifica la larghezza dell’iframe da includere;

       • height: valore che specifica l’altezza dell’iframe da includere;

       • src: stringa che specifica il documento da caricare all’interno dell’iframe (anche
         un url esterno se necessario).
    Il tag <iframe>, inoltre, supporta tutti gli attributi del tag <frame>.
        L’elemento iframe, permettendo di inserire un frame all’interno di una sezione di
    testo, consente di includere un documento HTML dentro un altro.

    2.5.1.1    Esempio di un iframe

1   < iframe src = " http :// www . units . it " width = " 820 " height = " 300 " >
        </ iframe >
                                Codice 2.3: Esempio di un iframe
2. Script JavaScript frame e iframe          10




                  Figura 2.5: Iframe ospitato all’interno di una pagina web



2.6     Quesiti preliminari allo studio
L’idea di intraprendere uno studio con l’obiettivo di realizzare una caratterizzazione di
script JavaScript nel web, nasce in seno alla consapevolezza che sempre pi` spesso pagine
                                                                            u
web ospitano script, per sfruttare l’interazione dinamica fra client e server.
    Questa ricerca ` stata mossa dalla volont` di rispondere a cinque macro quesiti, in
                    e                           a
modo tale da soddisfare l’intento di definire l’uso odierno di script JavaScript, frame e
iframe nelle pagine web.
    Prima di esporre i quesiti ` doveroso introdurre alcuni concetti presenti in essi. Tali
                                e
concetti verranno chiariti e analizzati in maniera pi` approfondita nel corso di questo ela-
                                                     u
borato, ora viene proposta solamente un’anticipazione volta a garantire la comprensione
delle domande.
    Sebbene non si trovi una definizione precisa di offuscamento, si pu` comunque affer-
                                                                         o
mare che un codice offuscato ` un codice la cui sintassi originale ha subito delle modifiche
                              e
per essere resa pi` difficile da comprendere. I propositi che spingono un programmatore
                  u
ad offuscare il proprio codice risultano essere antitetici. Infatti, se da un lato l’offusca-
mento viene utilizzato come mezzo per proteggere la paternit` del codice, dall’altro `
                                                                  a                        e
spesso impiegato dagli autori di software maligno per nascondere frammenti di codice
nocivo che, ad esempio, possono dar luogo a browser exploits, in sostanza attacchi infor-
matici che sfruttano un difetto o vulnerabilit` di un sistema operativo o di una parte di
                                               a
software con l’intenzione di alterare le impostazioni del browser all’insaputa dell’utente,
consentendo, ad esempio, il download automatico di componenti dannosi per il sistema
11                    Quesiti preliminari allo studio


o la sottrazione fraudolenta di dati privati.
     Come verr` meglio illustrato al capitolo 5, le tecniche che mirano ad offuscare il codi-
                a
ce fanno frequente uso di espressioni regolari e operazioni su stringhe. Ci` ` reso possibile
                                                                           oe
dall’utilizzo di alcune funzioni JavaScript native come escape() e unescape() che opera-
no in maniera opposta, codificando e decodificando una stringa, ed eval() che completa
il lavoro iniziato dalle precedenti eseguendo la stringa passatale come argomento.
     Gli esperti concordano sul fatto che tutt’oggi ci sia un ricorso abusivo dell’utilizzo
della funzione eval()7 . Solo in una piccola percentuale di casi, infatti, l’utilizzo di
eval() risulta essere indispensabile. Ci` si verifica quando, ad esempio, ` necessario
                                            o                                   e
realizzare complesse espressioni matematiche basate su input dell’utente o quando `         e
necessario serializzare8 lo stato di un oggetto9 all’interno di una stringa affinch` possa
                                                                                     e
essere memorizzato, trasmesso e ricostruito nel seguito.
     Nella maggior parte delle situazioni, l’uso di eval() risulta essere scorretto e ten-
denzialmente pericoloso. Infatti, spesso le potenzialit` di questa funzione non risultano
                                                          a
necessarie e comportano scarse perfomance del sistema. A tal riguardo si propone una
considerazione. Il fatto che eval() esegua una stringa trattandola come codice, implica
che a tempo di esecuzione venga effettuata una nuova compilazione ed interpretazione
del codice, comportando cos` una notevole perdita in termini di prestazioni.
                               ı
     Per ci` che concerne la pericolosit` di eval(), ` doveroso introdurre lo nozione di
           o                             a              e
code injection. Con questo termine si indica l’inserimento all’interno di un’applicazione
(nel nostro caso un’applicazione web) di codice malevolo, eseguito dalla stessa in un
secondo momento.
     Molti moderni linguaggi di scripting permettono la dynamic evaluation, che prevede
l’utilizzo di funzioni come eval() per eseguire frammenti di codice ricavati a runtime.
Essa, pensata soprattutto come scorciatoia per il programmatore, pu` rappresentare un
                                                                         o
grave problema per la sicurezza dell’applicazione nel caso in cui il frammento di codice
eseguito dinamicamente contenga dell’input non opportunamente validato.
     Si consideri, a questo proposito, un’applicazione web che faccia uso di eval() per va-
lutare le richieste HTTP10 effettuate tramite il metodo GET. Tale metodo prevede che il
valore del parametro, inserito dall’utente durante una richiesta, venga aggiunto all’URL
preceduto da un ‘?’ (come http://www.website.com/evalpage.php?parameter). Nel caso
in cui l’input non sia vagliato con estrema attenzione prima della valutazione, l’attac-
cante pontenzialmente ` in grado di eseguire sul server qualsiasi comando semplicemente
                          e
inviando all’applicazione opportuni parametri tramite l’URL.

    7
      Per un’idea rispetto alla rilevanza dell’argomento, si propone al lettore di interrogare un motore di
ricerca, come Google, con il gioco di parole “eval is evil”.
    8
      Serializzazione: processo di conversione di un oggetto in un flusso di byte per archiviarlo in memoria,
in un database o in un file oppure per trasmetterlo su una connessione di rete. Lo scopo principale ` di e
salvare lo stato di un oggetto al fine di poterlo ricreare identico tramite il processo inverso che prende il
nome di deserializzazione.
    9
      Stato di un oggetto: valore di tutti i dati membro dell’oggetto considerato in un certo istante.
   10
      Richiesta HTTP : insieme di linee inviate al server dal client ad esempio per prelevare una pagina
web. Per una maggiore spiegazione si rimanda al paragrafo 3.2.1 di pagina 15.
2. Script JavaScript frame e iframe         12


2.6.1    I cinque quesiti
Vengono ora elencati in maniera schematica ed essenziale i cinque macro quesiti che
rappresentano le linee guida del nostro studio.

   1. Quanto ` diffusa l’inclusione di script da url diversi?
             e

   2. A che profondit` di inclusione si arriva per includere script?
                     a

   3. Quanto ` diffuso l’utilizzo di eval()?
             e

   4. Quanto ` diffusa l’inclusione di frame e iframe sospettosamente piccoli?
             e

   5. Quanto ` diffuso l’utilizzo di tecniche di offuscamento?
             e

   Nei capitoli successivi verr` illustrato l’iter complessivo adottato (dalla raccolta del
                                a
dataset, all’individuazione dei parametri per l’analisi da compiere fino all’analisi vera e
propria) per dar risposta a queste domande e ad altre pi` dettagliate ma sempre facenti
                                                           u
capo ai cinque cardini menzionati.
   In conclusione verranno esposte le deduzioni ricavate a seguito delle osservazioni
condotte sui risultati ottenuti.
Capitolo                    3
Il dataset

Per rispondere ai cinque macro quesiti esposti nella sottosezione 2.6.1 di pagina 12,
abbiamo deciso di costruire un dataset di pagine che, grosso modo, rispecchiasse lo
scenario attuale del Web.
    Nella fattispecie ` stato scelto di popolare il dataset mediante tre categorie di pagine
                       e
che riproducessero la reale divisione delle pagine nel Web.
    A tal scopo si ` stabilito di destinare l’80% del dataset a pagine ritenute normali
                     e
e auspicabilmente innocue, visitate quotidianamente da un alto tasso di utenti, mentre
poco meno di un quinto del dataset ` stato riservato a pagine presumibilmente maligne
                                        e
dal contenuto sospetto e probabilmente nocivo, ed infine una minima porzione di dataset
` stata popolata con pagine interessanti poich` volte a calcolare le prestazioni del web
e                                                  e
browser  1 dell’utente, sottoposto all’elaborazione di particolari script JavaScript.

    Si ` deciso di utilizzare tre diverse fonti dalle quali prelevare gli url delle pagine
       e
da scaricare e analizzare. A seconda della fonte di provenienza sono state definite tre
tipologie di pagina: Normal, Malicious ed Interesting.
    In questo capitolo vengono presentate le fonti impiegate, gli strumenti atti al down-
load delle pagine, l’intervallo di scaricamento e la composizione finale del dataset.


3.1     Le fonti
3.1.1    La fonte per le pagine Normal
La parte pi` consistente del dataset ` formata dalle pagine definite Normal. Si ` deciso
            u                           e                                             e
di far ricadere in questa categoria le home page dei siti web pi` visitati al mondo. Per
                                                                    u
ottenere questo elenco ci si ` avvalsi della Top Milion Sites List stilata dall’azienda Alexa
                             e
Internet Inc. e scaricabile dal sito della stessa.
    Il campione di pagine Normal ` parte del milione. Nello specifico sono state selezio-
                                     e
nate le prime mille della lista.
   1
     Web browser : programma che consente all’utente di navigare nel web e quindi di visualizzare e
interagire con testi, immagini e altre informazioni, tipicamente contenute in una pagina web.


                                                13
3. Il dataset                                14


    Data la facilit` di reperimento di questa tipologia di pagine, il download delle 1000
                   a
Normal ha richiesto l’arco di una giornata per essere completato. Esso ha avuto successo
nel 83,4% dei casi. In definitiva ` stato possibile compiere l’analisi su 834 pagine Normal.
                                 e

3.1.1.1    Alexa Top Sites
La Alexa Internet Inc. ` un’azienda statunitense, fondata nel 1996, sussidiaria di Ama-
                          e
zon.com che si occupa di statistiche sul traffico di Internet. Alexa, abbreviazione di
Address Lookup EXperts Authority, ` anche un motore di ricerca con un servizio di web
                                       e
directory [5].
    Alexa classifica i siti basandosi sulle visite effettuate dagli utenti della Alexa Toolbar,
per Internet Explorer, e dalle barre degli strumenti integrate in Mozilla e Netscape. Una
volta installata, la toolbar memorizza i dati relativi al traffico del browser e li invia al web
service di Alexa che li immagazzina e analizza al fine di creare le proprie statistiche [4].
A partire dal 1996 si contano oltre 10 milioni di toolbar installate anche se la compagnia
non fornisce il numero esatto [5].
    Alexa rende disponibile la lista Top Sites per nazione, lingua o categoria. La lista
classifica il milione di siti maggiormente visitati e ordinati secondo l’Alexa Traffic Rank.

3.1.2     La fonte per le pagine Malicious
Per ci` che concerne le pagine pertinenti la tipologia Malicious, la scelta della fonte `
       o                                                                                     e
stata fatta ricadere sulla lista dei siti infettati da malware redatta dal progetto Malware
Domain List e pubblicata sul sito dello stesso: www.malwaredomainlist.com.
    Le pagine Malicious sono state segnate da un intervallo di scaricamento dilatato
nel tempo. Questo fatto ` stato reso necessario da due fattori: l’impossibilit` di pos-
                            e                                                        a
sedere un numero congruo di url da scaricare nel medesimo momento e la frequente
difficolt` riscontrata nel download, presumibilmente dovuta alla rimozione delle pagine
         a
incriminate.
    Durante l’arco di due mesi, quotidianamente ` stata visionata la lista pubblicata sul
                                                       e
sito www.malwaredomainlist.com e da quella sono stati estratti i nuovi url presenti.
    Si ` scelto di scaricare tutti gli url raccolti nell’elenco ad eccezione di quelli laddove
       e
l’estensione della risorsa indicava che l’url in questione si riferiva ad un programma
eseguibile.

3.1.2.1    Malware Domain List
Malware Domain List ` un progetto non a fini commerciali nato nel luglio 2007, grazie
                         e
all’impegno di alcuni volontari.
     Il progetto mantiene aggiornata una lista di domini che vengono scoperti propagare
malware e spyware all’interno del web.
     Tra le altre informazioni presenti nella lista, ad ogni dominio sono associati la data e
l’ora d’inserimento nell’elenco, la descrizione del malware diffuso, l’ip e la ragione sociale
con la quale il dominio ` registrato.
                          e
15      Metodologia di scaricamento delle pagine


    Dopo previa iscrizione al progetto, chiunque ha la possibilit` di collaborare all’ag-
                                                                   a
giornamento della lista di domini maligni. Gli URL notificati dai collaboratori, prima
di essere inseriti nell’elenco, passano al vaglio degli amministratori del progetto. Oltre
a ci` la lista viene mantenuta anche grazie alla cooperazione con altri siti operanti nello
    o
stesso campo, come www.malwareurl.com e www.hosts-file.net.
    A questo progetto si appoggiano sia ricercatori che internet service provider2 per
smascherare e debellare i siti divulgatori di malware.

3.1.3     La fonte per le pagine Interesting
Con l’appellativo Interesting si vogliono indicare le pagine costituite da JavaScript
benchmark.
    Gli strumenti di JavaScript benchmark consentono di testare, verificare e confrontare
le performance JavaScript dei vari web browser. I benchmark racchiudono in s` diverse
                                                                                    e
prove per testare le prestazioni JavaScript del browser in uso: calcoli matematici, velocit`
                                                                                           a
di accesso agli oggetti e alle loro propriet`, utilizzo di regexp, string processing ecc.
                                            a
    Per lo studio in esame sono stati scelti i JavaScript benchmark rilasciati dai tre mag-
giori produttori di web browser: V8 Benchmark, Dromaeo e SunSpider rispettivamente
distribuiti da Google, Mozilla e WebKit.


3.2      Metodologia di scaricamento delle pagine
Prima mettere in luce la metodologia di scaricamento adottata, vengono proposte due
serie di definizioni utili al fine della totale comprensione lungo il prosieguo di tutto
l’elaborato.
     La prima sequenza presenta alcune nozioni a carattere generale mentre la seconda
espone dei concetti nati in seno al laboratorio di “Reti di Calcolatori” dell’Universit` di
                                                                                       a
Trieste, nel quale ` stata condotta questa ricerca.
                   e

3.2.1     Definizioni generali
    • URL: Uniform Resource Locator ` una sequenza di caratteri che identifica uni-
                                         e
      vocamente l’indirizzo di una risorsa in Internet. Esso si compone di cinque parti,
      alcune delle quali sono opzionali:

         – nome del protocollo: protocollo di rete da utilizzare per l’accesso al server.
           I protocolli pi` comuni sono l’HTTP, HTTPS, FTP;
                          u
         – id e password: credenziali per l’accesso alla risorsa;
         – nome del server: indirizzo fisico del server su cui risiede la risorsa. Pu`
                                                                                    o
           essere costituito da un nome di dominio o da un Indirizzo IP;
   2
     Internet Service Provider : struttura commerciale o organizzazione che offre ai propri utenti servizi
inerenti Internet come l’accesso alla network stessa e la posta elettronica.
3. Il dataset                               16


         – numero della porta: numero associato ad un servizio che permette al server
           di sapere quale tipo di risorsa ` richiesta;
                                           e
         – percorso di accesso alla risorsa: percorso nel file system del server che
           identifica la risorsa.

    • HTTP Request: insieme di linee inviate dal client al server per prelevare la
      risorsa. Essa comprende:

         – request line: ` una linea che precisa l’url del documento richiesto, il metodo
                          e
           che deve essere applicato (GET o POST) per ottenere la risorsa e la versione
           del protocollo usato;
         – header lines: insieme di linee facoltative che permettono di dare delle
           informazioni supplementari sulla richiesta;
         – entity body: insieme di linee opzionali, separate dalle headers line tramite
           una linea vuota, che consentono l’invio di dati al server qualora il metodo
           specificato nella request line sia di tipo POST.

    • HTTP Response: insieme di linee inviate dal server al client. Essa comprende:

         – status line: ` una linea che precisa la versione del protocollo usata, lo stato
                        e
           di trattamento della richiesta attraverso un codice e un testo esplicativo del
           codice;
         – header lines: insieme di linee facoltative che permettono di dare delle
           informazioni supplementari sulla risposta;
         – entity body: documento richiesto dal client.

    • HTTP Redirection: redirezione verso un nuovo URL associato al documento.
      Il nuovo url ` specificato nell’header Location dell’HTTP response.
                   e

3.2.2     Nostre definizioni
    • Risorsa: pagina web visualizzabile tramite web browser. Ogni risorsa ` associata
                                                                               e
      ad un URL. Nel caso la risorsa sia un documento HTML, essa include anche tutte
      le informazioni necessarie al browser per la sua visualizzazione (script JavaScript,
      frame, iframe, immagini, CSS);

    • Snapshot: contenuto di una risorsa di URL u in un dato istante di tempo t; con
      contenuto si indicano tutti gli header ottenuti, sia di request che di response, il
      content type, la data e la durata del download e l’albero delle ricorrenze, il quale
      include:

         – l’html della pagina per la quale si ` avviato il download (root html);
                                               e
         – l’html ottenibile dagli URL indicati nell’attributo src dei tag iframe o frame
           della root html o di altri child html (child html);
17           Dimensione complessiva del dataset


        – gli script JavaScript ottenibili dagli URL indicati nell’attributo src dei tag
          script della root html o dei child html;
        – i css ottenibili dagli URL indicati nell’attributo src dei tag link della root
          html o dei child html;
        – i css ottenibili dagli URL indicati nella direttiva @import di altri css;
        – le immagini ottenibili dagli URL indicati nell’attributo src dei tag img della
          root html o dei child html;
        – le immagini ottenibili dagli URL specificati con le direttive background e
          background-image dei css.

3.2.3   Goldrake
Per dar luogo allo scaricamento ` stato utilizzato il componente downloader di un’istanza
                                 e
di Goldrake, sistema sviluppato presso il laboratorio di “Reti di Calcolatori”del DEEI
dell’Universit` di Trieste, capace di garantire un controllo, periodico e automatizzato,
              a
di siti remoti.
    Tale strumento, a partire dall’url della risorsa, immagazzina in un database relazio-
nale lo snapshot di quella. Per costruire l’albero delle dipendenze, il programma analizza
in maniera ricorsiva la pagina iniziale e le dipendenze della stessa utilizzando una serie
di sensori.


3.3     Dimensione complessiva del dataset
A conclusione del periodo di scaricamento delle pagine, durato pressoch` due mesi, la
                                                                       e
composizione del dataset risultava cos` partizionata:
                                      ı

   • 834 pagine Normal ;

   • 200 pagine Malicious;

   • 3 pagine Interesting.
Capitolo                  4
Metodologia di analisi

Una volta ottenuto il dataset, come spiegato al capitolo 3, si ` proceduto con l’orga-
                                                                  e
nizzazione e la preparazione dei dati, al fine di poter avviare l’analisi fulcro di questa
tesi.
    Poich´ la materia di studio ` rappresentata da script JavaScript, frame e iframe, la
         e                        e
mole di dati legati agli snapshot forniti dal downloader di Goldrake, ` stata sottoposta ad
                                                                      e
una selezione tesa ad estrapolare il complesso di informazioni inerenti, appunto, script,
frame e iframe.
    A questo primo scorporamento ` seguita la riorganizzazione dei dati per porli nel
                                      e
formato pi` consono all’analisi.
           u


4.1     Suddivisione del dataset
Dall’albero delle dipendenze di ogni pagina sottoposta a scaricamento, sono stati estra-
polati i dati d’interesse per la nostra indagine. Con tali elementi ` stato popolato un
                                                                     e
ulteriore database.
    La struttura del DB sopracitato, pu` essere descritta semplificandola e riassumendola
                                        o
in due tabelle, una associata agli script JavaScript e una ai frame e agli iframe.

4.1.1   La tabella degli script
Per ogni script JavaScript, collegato in qualche misura a una risorsa, ` stata inserita una
                                                                       e
riga in una tabella Ts , costituita dai seguenti campi:

   • Script URL: url dello script;

   • Root page URL: url della pagina per la quale si ` avviato il download;
                                                     e

   • Root page type: tipologia della pagina (Normal, Malicious o Interesting);

   • Script body: codice contenuto nello script;

                                            19
4. Metodologia di analisi                        20


   • Category: categoria di appartenenza dello script, una fra le seguenti:

         – Embedded Script: script identificato da un tag HTML <script> che non
           include l’attributo src (un inline script);
         – Child Script: script identificato da un tag HTML <script> che include
           l’attributo src e che quindi non contiene il codice dello script ma solo il
           puntatore all’indirizzo dove quello deve essere prelevato;
         – Intrinsic Event: script definito all’interno di un tag HTML come <onload>,
           <onclick>, <onsubmit>, <onchange>, <onfocus>, <onmouseover>, e cos` via.
                                                                                ı

   • Locality: campo booleano che, a seconda del valore, conferisce allo script una
     delle seguenti accezioni:

         – Local: qualora lo Script URL e il Root page URL condividano almeno gli
           ultimi due livelli del nome DNS1 ;
         – Remote: altrimenti.

   • List of HTTP redirection for the script: lista degli URL appartenenti alla
     sequenza di download dello script. Tale lista include anche tutte le redirezioni
     HTTP e mantiene l’ordine di scaricamento degli URL;

   • Total steps: numero degli elementi della lista sopra menzionata;

   • Inclusion steps: risultato della sottrazione delle redirezioni HTTP al numero
     identificato come Total steps.
      Il concetto pu` essere pi` chiaro con l’esempio successivo. Si consideri un Child
                     o          u
      Script, quindi uno script il cui codice ` definito all’esterno della pagina web di
                                               e
      cui si ` avviato lo scaricamento. La lista degli URL appartenenti alla sequenza
             e
      di download dello script contiene l’URL della pagina principale e l’URL puntato
      dall’attributo src del tag <script>. In questo specifico caso lo script ` caratte-
                                                                                  e
      rizzato da Total steps=2 e Inclusion steps=2 perch` durante il percorso non si
                                                              e
      sono riscontrate redirezioni HTTP. Si consideri ora lo stesso esempio ma nella si-
      tuazione in cui la richiesta HTTP inoltrata dal client al server per prelevare tale
      script all’URL puntato, riceva una risposta HTTP con il campo Location settato;
      nell’header Location ` precisato il nuovo url da cui prelevere lo script richiesto. In
                             e
      questo caso il client subisce una redirezione e lo script risulta esser caratterizzato
      da Total steps=3 e Inclusion steps=2.

   A seconda delle combinazioni dei campi Category e Locality, gli script sono stati
raggruppati in sei diverse classi. Come verr` meglio illustrato nei capitoli seguenti, per
                                              a
molte analisi ci si ` avvalsi di questa suddivisione.
                    e
   1                                                                     `
     DNS : Domain Name System, sistema di denominazione del dominio. E un database distribuito che
viene utilizzato per creare una corrispondenza tra indirizzo IP e nome mnemonico assegnato a un nodo.
21                      Suddivisione del dataset


4.1.1.1    Lo script: dalla pagina alla tabella
In questo paragrafo si descrive un esempio relativo al download di una pagina web,
www.amazon.com, con successiva estrazione degli script contenuti in essa e popolamento
della tabella Ts .
    L’url di cui si avvia lo scaricamento ` la home page del sito www.amazon.com, che,
                                           e
visualizzata tramite un browser, appare all’utente come in Figura 4.1 a pagina 22.
    Una volta terminato lo scaricamento, si evince che la pagina ` formata da 32 Embed-
                                                                    e
ded Script, 7 Child Script e 4 Intrinsic Event.
    Nel seguito si elencano i valori dei campi della riga inserita in Ts e relativa al primo
Embedded Script scaricato dalla pagina.

   • Script URL: http://www.amazon.com;

   • Root page URL: http://www.amazon.com;

   • Root page type: Normal;

   • Script body:
   1   <! --
   2   function amz_js_PopWin ( url , name , options ) {
   3      var ContextWindow = window . open ( url , name , options ) ;
   4      ContextWindow . focus () ;
   5      return false ;
   6   }
   7   // -- >
                              Codice 4.1: Codice dello script


   • Category: Embedded Script;

   • Locality: Local;

   • List of HTTP redirection for the script:

          – http://www.amazon.com;

   • Total steps: 1;

   • Inclusion steps: 1;

   Per maggior chiarezza si riportano anche i dati d’interesse appartenenti al primo
Child Script scaricato dalla pagina.

   • Script URL: http://m1.2mdn.net/879366/flashwrite 1 2.js;

   • Root page URL: http://www.amazon.com;

   • Root page type: Normal;
4. Metodologia di analisi                   22




             Figura 4.1: Home page di Amazon visualizzata tramite un browser


   • Script body:

   1   function dclkToObject ( id ) {
   2       if ( document . layers ) {
   3          return ( document . layers [ id ]) ? eval ( document . layers [ id ]) :
                  null ;
   4       }
   5       else if ( document . all && ! document . getElementById ) {
   6          return ( eval ( " window . " + id ) ) ? eval ( " window . " + id ) : null ;
   7       }
   8       else if ( document . getElementById && document . body . style ) {
   9          return ( document . getElementById ( id ) ) ? eval ( document .
                  getElementById ( id ) ) : null ;
  10       }
  11     }
  12
  13   function dclkFlashWrite ( string ) {
  14     document . write ( string ) ;
  15     }
  16

  17   function d cl kF la shI nn er HT ML ( htmlElementId , code ) {
  18     var x = dclkToObject ( htmlElementId ) ;
  19     if ( x ) {
  20        if ( document . getElementById || document . all ) {
  21            x . innerHTML = ’ ’;
  22            x . innerHTML = code ;
23                    Suddivisione del dataset


  23          }
  24        else if ( document . layers ) {
  25          x . document . open () ;
  26          x . document . write ( code ) ;
  27          x . document . close () ;
  28          }
  29        }
  30    }
                             Codice 4.2: Codice dello script


   • Category: Child Script;

   • Locality: Remote;

   • List of HTTP redirection for the script:

        – http://www.amazon.com
        – http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;u=7689...
          ;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;s=m1;z=1;tile=3?
        – http://ad.doubleclick.net/adi/N624.160337.0447968804521/B3948491;sz=300x250;
          click=http://ad.doubleclick.net/click%3Bh=v8/38c1/3/0/%2a/a%3B132905229%
          3B0-0%3B0%3B18273354%3B4307-300/250%3B33661023/33678901/1%3Bu%
          3D768289f015614a40a75c747a2f702ea3%3B%7Eaopt%3D2/1/4/2%3B%7Esscs%
          3D%3f;ord=2385959?
        – http://m1.2mdn.net/879366/flashwrite 1 2.js

   • Total steps: 4;

   • Inclusion steps: 4;

4.1.2   La tabella dei frame e degli iframe
Analogamente alla tabella Ts , ` stata popolata anche una tabella Ti relativa ai frame
                                e
e agli iframe reperiti analizzando i tag HTML <frame> e <iframe> riscontrati nelle
sequenza di download di ogni risorsa.
   Di seguito viene presentata la descrizione dei campi della tabella Ti :

   • Iframe URL: url del frame o dell’iframe;

   • Root page URL: url della pagina per la quale si ` avviato il download;
                                                     e

   • Root page type: tipologia della pagina (Normal, Malicious o Interesting);

   • Iframe body: codice contenuto fra le coppie di tag HTML <frame>. . . e . . . </frame>
     o <iframe>. . . e . . . </iframe>;

   • Enclosing: tipo di inclusione del frame o dell’iframe, una fra le seguenti:
4. Metodologia di analisi                      24


          – HTML Embedded: frame o iframe incluso all’interno del codice HTML di
            una pagina;
          – Script Embedded: frame o iframe incluso all’interno del codice JavaScript
            di uno script.

   • Locality: campo booleano che, a seconda del valore, conferisce al frame o all’ifra-
     me una delle seguenti accezioni:

          – Local: qualora l’Iframe URL e il Root page URL condividano almeno gli
            ultimi due livelli del nome DNS;
          – Remote: altrimenti.

   • List of HTTP redirection for the iframe: lista degli URL appartenenti alla
     sequenza di download del frame o dell’iframe. Tale lista include anche tutte le
     redirezioni HTTP e mantiene l’ordine di scaricamento degli URL;

   • Total steps: numero degli elementi della lista sopra menzionata;

   • Inclusion steps: risultato della sottrazione delle redirezioni HTTP al numero
     identificato come Total steps.

    Nelle nostre analisi i frame e gli iframe sono stati classificati in base ai quattro gruppi
scaturiti dalle combinazioni dei campi Enclosing e Locality.

4.1.2.1    L’iframe: dalla pagina alla tabella
Sempre a seguito del download della pagina www.amazon.com (Figura 4.1), la tabella Ti
` stata popolata con cinque iframe: 3 del tipo Embedded e 2 del tipo Script Embedded.
e
    Nel seguito si elencano i valori dei campi della riga inserita in Ti e relativa al primo
iframe HTML Embedded della pagina.

   • Iframe URL: http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;
     u=768289f015614a40a75c747a2f702ea3;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;
     s=m1;z=1;tile=3?;

   • Root page URL: http://www.amazon.com;

   • Root page type: Normal;

   • Iframe body:
   1   < iframe xmlns = " http :// www . w3 . org /1999/ xhtml " bordercolor = "
           #000000 " frameborder = " 0 " height = " 250 " hspace = " 0 "
           marginheight = " 0 " marginwidth = " 0 " scrolling = " no " src = " http
           :// ad . doubleclick . net / adi / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 /
           B3948491 ; sz =300 x250 ; click = http :// ad . doubleclick . net / click
           %3 Bh = v8 /38 c1 /3/0/%2 a / a %3 B132905229 %3 B0 -0%3 B0 %3 B18273354 %3
           B4307 -300/250%3 B33661023 /33678901/1%3 Bu %3
25                 Analisi sugli script e sugli iframe


          D 7 6 8 2 8 9 f 0 1 5 6 1 4 a 4 0 a 7 5 c 7 4 7 a 2 f 7 0 2 e a 3 %3 B %7 Eaopt %3 D2 /1/4/2%3 B %7
          Esscs %3 D %3 f ; ord =2385959? " vspace = " 0 " width = " 300 " > & lt ;
          SCRIPT language = ’ JavaScript1 .1 ’ SRC = " http :// ad . doubleclick
          . net / adj / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie ; sz =300
          x250 ; ord =2385959? " & gt ; & lt ;/ SCRIPT & gt ; & lt ; NOSCRIPT & gt ; &
          lt ; A HREF = " http :// ad . doubleclick . net / jump / N624
          . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie4 ; abr =! ie5 ; sz =300
          x250 ; ord =2385959? " & gt ; & lt ; IMG SRC = " http :// ad . doubleclick .
          net / ad / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie4 ; abr =!
          ie5 ; sz =300 x250 ; ord =2385959? " BORDER =0 WIDTH =300 HEIGHT =250
            ALT = " " Click Here " " & gt ;& lt ;/ A & gt ; & lt ;/ NOSCRIPT & gt ; </
          iframe >
                                  Codice 4.3: Codice dell’iframe


   • Enclosing: HTML Embedded;

   • Locality: Remote;

   • List of HTTP redirection for the iframe:

        – http://www.amazon.com;
        – http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;u=7689...
          ;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;s=m1;z=1;tile=3?;

   • Total steps: 2;

   • Inclusion steps: 2;


4.2     Analisi sugli script e sugli iframe
Una volta ottenute le informazioni sulle “generalit`” di script, frame e iframe, si ` deciso
                                                     a                              e
di analizzarne il contenuto e quindi scendere a livello del codice per ricavarne gli apetti
salienti e poter soddisfare l’intento di fornirne una caratterizzazione complessiva.
    A tal scopo sono stati definiti due set di propriet` da estrarre e da misurare, il primo
                                                        a
peculiare per gli script, il secondo per i frame e gli iframe.

4.2.1    Propriet` estratte dagli script
                 a
L’obiettivo prefisso nella definizione delle propriet`, si individua nell’esigenza di svisce-
                                                    a
rare il singolo script al fine di esaminarne le componenti, quali le funzioni definite dal
programmatore, le funzioni native JavaScript come, ad esempio, eval() e unescape(),
i document.write(), gli iframe e le variabili.
    Nel seguito viene delineato l’elenco delle propriet` estratte per ogni script.
                                                       a

   • Function name: nome di ogni funzione definita nello script;
4. Metodologia di analisi                     26


   • Document.write: argomento di ogni invocazione di tipo document.write();

   • Iframe: argomento racchiuso fra i tag HTML <iframe>. . . e . . . </iframe>;

   • Variable name: nome di ogni variabile definita nello script;

   • Variable content: contenuto di ogni variabile definita nello script;

   • Long string: contenuto di ogni stringa costante di dimensione superiore ai 140
     caratteri definita nello script;

   • Eval: argomento di ogni invocazione di tipo eval();

   • Unescape: argomento di ogni invocazione di tipo unescape();

   • Decode: argomento di ogni invocazione di tipo decode();

   • Onerror: argomento di ogni invocazione di tipo onerror();

   • Exec: argomento di ogni invocazione di tipo exec();

   • String.fromCharCode: argomento di ogni invocazione di tipo String.fromCharCode();

   • String.charCodeAt: argomento di ogni invocazione di tipo String.charCodeAt();

   • Math.random: argomento di ogni invocazione di tipo Math.random();

4.2.2    Propriet` estratte dai frame e dagli iframe
                 a
Per ci` che concerne i frame i gli iframe le propriet` estratte si riassumono nelle dimen-
      o                                              a
sioni degli stessi:

   • width: valore che specifica la larghezza del frame o dell’iframe;

   • height: valore che specifica l’altezza del frame o dell’iframe;

    Le propriet` elencate in questi due paragrafi si pongono come nucleo fondante per
                 a
le nostre analisi. Esse sono state analizzate sotto vari aspetti a seconda delle esigenze:
talvolta ne ` stato considerato il numero di occorrenze, talatra ` stato preso in considera-
             e                                                     e
zione il valore insito nella propriet` o, ancora, ci si ` soffermati sul risultato di particolari
                                     a                  e
elaborazioni effettuate su quei valori.
Capitolo                      5
Offuscamento

Lungo questo capitolo viene trattato un tema complicato e caratterizzato da aspetti su
cui attualmente non ` ancora stata fatta completa chiarezza: l’offuscamento. Codesto
                        e
argomento ha impiegato una parte consistente di tempo dedicato a questa ricerca.
    Il capitolo ` essenzialmente suddiviso in quattro sezioni.
                e
    Nella prima viene esposto il concetto di offuscamento cos` come trattato in lettera-
                                                                   ı
tura. Vengono elencate le motivazioni alla base dell’offuscamento del codice e vengono
forniti alcuni esempi.
    Quindi il focus del capitolo passa nello specifico all’offuscamento come tecnica per ce-
lare contenuti maligni. In questa parte viene definito e analizzato anche l’uso di eval().
Infatti, il concetto di offuscamento ` sovente accumunato a tale funzione JavaScript.
                                       e
    Nella terza parte del capitolo viene dato spazio al tema degli iframe sospettosamente
“piccoli” se non adirittura invisibili. In tale sezione viene spiegato il rapporto che sussiste
fra questa tipologia di iframe e l’offuscamento; al lettore risulter` quindi chiara la scelta
                                                                     a
di inserire l’argomento all’interno di questo capitolo.
    Infine, viene esposto il nostro approccio al problema. Viene illustrata la metodologia
di analisi tesa alla caratterizzazione dell’offuscamento degli script presenti nel nostro
dataset (quasi 54 mila).
    L’obiettivo di questa fase dello studio ` consistito nel fornire degli strumenti per
                                                 e
poter rispondere agli ultimi tre macroquesiti introdotti al paragrafo 2.6.1 di pagina 12.


5.1      Definizione di offuscamento
Come gi` anticipato nella sezione 2.6 a pagina 10, nonostante non esista una definizione
        a
precisa del concetto di offuscamento, si pu` asserire che un codice offuscato ` un codice
                                          o                                 e
sorgente1 o macchina2 che ` stato intenzionalmente modificato per essere reso difficil-
                            e
   1
    Codice sorgente: insieme di istruzioni scritte dal programmatore per realizzare un programma.
   2
    Codice macchina: insieme di istruzioni binarie direttamente eseguibili dalla macchina. Se il codice
sorgente ` scritto con un linguaggio ad alto livello, per essere eseguito dev’essere tradotto in codice
         e
macchina.


                                                  27
5. Offuscamento                                     28


mente comprensibile sia da un analista umano che da un programma la cui finalit` sia       a
quella di effettuare il reverse engineering 3 , ossia di impedire di risalire all’algoritmo alla
base del codice.
    Gli scopi che spingono un programmatore ad offuscare il proprio codice sono para-
dossalmente opposti. Da un lato, il ricorso alla code obfuscation ` volto alla protezione
                                                                       e
del sorgente, quindi prevenire il reverse engineering, in modo tale da impedirne il plagio
e la contraffazione. D’altro canto, invece, l’offuscamento pu` essere impiegato per celare
                                                               o
codice maligno con finalit` biasimevoli.
                           a


5.2        Programmi atti all’offuscamento
I programmi che trasformano il codice “human-readable” in codice offuscato si defini-
scono obfuscators. Essi differiscono a seconda del linguaggio trattato e delle tecniche
utilizzate per il loro scopo.
    Inoltre, questi programmi vengono classificati in base a tre parametri:

       • Potenza: indica il grado di offuscamento raggiunto dal codice in seguito alla
         trasformazione;

       • Resilienza: indica il grado di resistenza del codice offuscato contro un attacco da
         parte di uno strumento che opera la trasformazione inversa;

       • Costo: indica l’overhead4 aggiunto all’applicazione originale.


5.3        Programmi per offuscare codice JavaScript
Compiendo una rapida ricerca in rete, si pu` osservare che esiste un numero ingen-
                                            o
te di programmi appartenenti alla categoria JavaScript obfuscator. Essi provvedono
all’offuscamento automatico di codice JavaScript.
    Solitamente questi programmi intervengono sul codice in esame compiendo tutte o
quasi le seguenti operazioni:

       • eliminazione dei commenti;

       • eliminazione degli spazi inutili;

       • rinomina delle funzioni;

       • rinomina dei parametri;
   3
     Reverse engineering: processo mediante il quale si cerca di scoprire i principi sui quali si basa
un dispositivo, un software o un qualsiasi prodotto finito attraverso l’analisi della sua struttura, delle
funzionalit` e delle operazioni che questo svolge.
           a
   4
     Overhead : con questo termine si definiscono le risorse accessorie, richieste in sovrappi` rispetto
                                                                                              u
a quelle strettamente necessarie, per ottenere un determinato scopo in seguito all’introduzione di un
metodo o di un processo pi` evoluto o pi` generale.
                            u             u
29    Programmi per offuscare codice JavaScript


       • rinomina delle variabili;

       • rinomina dei metodi;

       • accorpamento del codice in un’unica riga;

       • compressione del codice.

    5.3.1   Primo esempio di funzionamento di un JavaScript obfuscator
    Il primo esempio, volto a chiarire il funzionamento di un JavaScript obfuscator, ` preso
                                                                                     e
    dal sito di un programma che compie la menzionata trasformazione sul codice [7].
1   function foo ( arg1 )
2   {
3     var myVar1 = " some string " ; // first comment
4     var intVar = 24*3600; // second comment
5     /* here is
6     a long
7     multi - line comment */
8     document . write ( " vars are : " + myVar1 + " " + intVar + " " + arg1 ) ;
9   }
                     Codice 5.1: Frammento di codice JavaScript da offuscare

        Quando il JavaScript obfuscator in questione effettua il parsing del codice, vengono
    eliminati gli spazi, i commenti e gli accapo. Inoltre, i nomi di funzioni, i parametri e
    le varibili vengono rimpiazzati con stringhe composte casualmente, ai valori degli inte-
    ri subentrano equazioni complesse, mentre le stringhe da visualizzare a schermo sono
    sostituite dai loro valori esadecimali.
        Il risultato ottenuto ` il seguente:
                              e
1   function z001c775808 ( z3833986e2c ) { var z0d8bd8ba25 = "  x73  x6f  x6d 
       x65  x20  x73  x74  x72  x69  x6e  x67 " ; var z0ed9bcbcc2 =(0 x90b +785 -0
       xc04 ) *(0 x1136 +6437 -0 x1c4b ) ; document . write ( "  x76  x61  x72  x73  x20
        x61  x72  x65  x3a " + z0d8bd8ba25 + "  x20 " + z0ed9bcbcc2 + "  x20 " +
       z3833986e2c ) ;}
              Codice 5.2: Stesso frammento di codice JavaScript dopo l’offuscamento

       Si elencano le sostituzioni apportate nelle tre categorie:

       • nomi di funzioni, parametri e variabili definiti dall’utente:

            – foo ` sostituito con z001c775808;
                  e
            – arg1 ` sostituito con z3833986e2c;
                   e
            – myvar1 ` sostituito con z0d8bd8ba25;
                     e
            – intvar ` sostituito con z0ed9bcbcc2;
                     e

       • valori di numeri interi:
5. Offuscamento                               30


             – 20 ` sostituito con (0x90b+785-0xc04);
                  e
             – 3600 ` sostituito con (0x1136+6437-0x1c4b);
                    e

        • stringhe da visualizzare a schermo:

             – vars are ` sostituita con x76x61x72x73x20x61x72x65x3a;
                        e
             – gli spazi sono sostituiti con x20.

     5.3.2    Secondo esempio di funzionamento di un JavaScript obfuscator
     In questo paragrafo si riporta un ulteriore esempio di codifica del codice operato da un
     altro JavaScript obfuscator (l’esempio ` tratto dal sito del programma stesso [8]).
                                                e
         Il seguente codice javascript calcola lo stipendio di ogni impiegato presente nella lista
     “aEmployees” di oggetti “Employees”.
         Questo esempio di offuscamento rientra nella prima tipologia di utilizzi citati nella
     sezione 5.1, infatti, gli scopi principali sono la protezione e la compressione del codice.
 1   function CalculateSalary ( aEmployees )
 2   {
 3      var nEmpIndex = 0;
 4      while ( nEmpIndex < aEmployees . length )
 5      {
 6         var oEmployee = aEmployees [ nEmpIndex ];
 7         oEmployee . fSalary = C a l cu l a te B a se S a la r y ( oEmployee . nType ,
 8                                                                     oEmployee .
                                                                             nWorkingHours ) ;
 9         if ( oEmployee . bBonusAllowed == true )
10         {
11            oEmployee . fBonus = C a l c u l a t e B o n u s S a l a r y ( oEmployee . nType ,
12                                                                           oEmployee .
                                                                                nWorkingHours ,
13                                                                           oEmployee . fSalary
                                                                                );
14         }
15         else
16         {
17            oEmployee . fBonus = 0;
18         }
19         oEmployee . sSalaryColor = GetSalaryColor ( oEmployee . fSalary +
20                                                                     oEmployee . fBonus ) ;
21         nEmpIndex ++;
22      }
23   }
                      Codice 5.3: Frammento di codice JavaScript da offuscare

        Dando in pasto questo codice al JavaScript obfuscator, ci` che ne risulta ` il successivo
                                                                 o                e
     frammento:
31 JavaScript come veicolo di contenuti maligni


1   function c ( g ) { var m =0; while ( m <g . length ) { var r = g [ m ]; r . l = d ( r .n , r . o ) ;
       if ( r . j == true ) { r . k = e ( r .n , r .o , r . l ) ;} else { r . k =0;} r . t = f ( r . l + r . k ) ; m
       ++;}}
                 Codice 5.4: Stesso frammento di codice JavaScript dopo l’offuscamento



    5.4      JavaScript come veicolo di contenuti maligni
    Se, come detto precedentemente, la presenza di una porzione di codice offuscato non
    implica che quel codice sia necessariamente infetto, ` comunque ragionevole ritenere che
                                                         e
    chi scriva del codice con contenuto maligno sia portato ad offuscarlo.
        Per questo motivo, nel seguito, si delinea un elenco di attacchi che possono essere
    effettuati anche tramite codice JavaScript.

        • Denial of Service: l’attacco DoS cerca di portare il funzionamento di un server
          al limite delle prestazioni, fino a renderlo non pi` in grado di erogare il servizio.
                                                            u
           Script JavaScript possono essere utilizzati dall’attaccante, per spedire una mole
           cos` ingente di richieste al server tale da metterlo fuori uso;
              ı

        • Cross-Site-Scripting: l’attacco definito anche XSS, appartiene alla tipologia
          injection, si tratta, quindi, di immissione di codice arbitrario in input alle pagine
          web.
           Il cross-site scripting consente di accedere a informazioni sensibili, rubare dati di
           sessione degli utenti, compromettere i browser web che essi utilizzano o, ancor
           peggio, l’integrit` del sistema su cui tali browser stanno eseguendo.
                              a
           Gli attacchi alle vulnerabilit` XSS hanno effetti dirompenti per i siti con un ele-
                                         a
           vato numero di utenti, dato che ` sufficiente una sola compromissione per colpire
                                             e
           chiunque visiti la stessa pagina.
           Il primo passo di un attaccante sta nell’upload del proprio script malevolo all’in-
           terno del sito web designato ad ospitarlo. Il codice malevolo pu` essere inserito nel
                                                                           o
           sito:

              – deliberamente poich´ l’attaccante ne ` il proprietario;
                                   e                 e
              – sfruttando una vulnerabilit` del sistema operativo, o di livello Network o di
                                             a
                una delle zone del sito stesso.

        • Phishing: questo attacco mira ad ottenere l’accesso a informazioni personali o
          riservate tramite messaggi di posta elettronica che imitano grafica e logo dei siti
          istituzionali. L’email maligna indirizza il destinatario verso un sito web fasullo
          (apparentemente identico a quello fidato) che esorta la vittima a fornire informa-
          zioni riservate come codice fiscale, numero di conto corrente, numero di carta di
          credito e codici di identificazione.
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web

More Related Content

What's hot

Tesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGPTesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGPFabio Pustetto
 
Tesi Laurea Sergio Taddia
Tesi Laurea Sergio TaddiaTesi Laurea Sergio Taddia
Tesi Laurea Sergio TaddiaSergio Taddia
 
Modellazione della dinamica di un liquido bifase mediante GPU CUDA
Modellazione della dinamica di un liquido bifase mediante GPU CUDAModellazione della dinamica di un liquido bifase mediante GPU CUDA
Modellazione della dinamica di un liquido bifase mediante GPU CUDAkylanee
 
Profilazione utente in ambienti virtualizzati
Profilazione utente in ambienti virtualizzatiProfilazione utente in ambienti virtualizzati
Profilazione utente in ambienti virtualizzatiPietro Corona
 
Inoltro di pacchetti ip in sistemi linux
Inoltro di pacchetti ip in sistemi linuxInoltro di pacchetti ip in sistemi linux
Inoltro di pacchetti ip in sistemi linuxCe.Se.N.A. Security
 
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Davide Ciambelli
 
Interfaccia utente basata su eye-tracking per sistemi di controllo ambientale
Interfaccia utente basata su eye-tracking per sistemi di controllo ambientaleInterfaccia utente basata su eye-tracking per sistemi di controllo ambientale
Interfaccia utente basata su eye-tracking per sistemi di controllo ambientaleLuigi De Russis
 
Progetto e realizzazione di un kernel linux per il controllo dinamico degli s...
Progetto e realizzazione di un kernel linux per il controllo dinamico degli s...Progetto e realizzazione di un kernel linux per il controllo dinamico degli s...
Progetto e realizzazione di un kernel linux per il controllo dinamico degli s...Myrteza Kertusha
 
Monitoraggio di applicazioni software mediante modelli di Markov
Monitoraggio di applicazioni software mediante modelli di MarkovMonitoraggio di applicazioni software mediante modelli di Markov
Monitoraggio di applicazioni software mediante modelli di Markovrkjp
 
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...Francesco De Giorgi
 
Il mio libro - My book (intro)
Il mio libro - My book (intro)Il mio libro - My book (intro)
Il mio libro - My book (intro)pls3d
 
Il Linux OpenSound System
Il Linux OpenSound SystemIl Linux OpenSound System
Il Linux OpenSound SystemAntonioTringali
 
MARKETING ED ECOMMERCE NELL’EDITORIA: IL CASO TRADING LIBRARY
MARKETING ED ECOMMERCE NELL’EDITORIA: IL CASO TRADING LIBRARYMARKETING ED ECOMMERCE NELL’EDITORIA: IL CASO TRADING LIBRARY
MARKETING ED ECOMMERCE NELL’EDITORIA: IL CASO TRADING LIBRARYvantasso
 
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...maaske
 
Caratterizzazione di un rivelatore a piatti resistivi (RPC)
Caratterizzazione di un rivelatore a piatti resistivi (RPC)Caratterizzazione di un rivelatore a piatti resistivi (RPC)
Caratterizzazione di un rivelatore a piatti resistivi (RPC)Gerardo Di Iorio
 
Porting evolutivo di un’applicazione per la gestione di note spese in ambient...
Porting evolutivo di un’applicazione per la gestione di note spese in ambient...Porting evolutivo di un’applicazione per la gestione di note spese in ambient...
Porting evolutivo di un’applicazione per la gestione di note spese in ambient...enriconatella
 

What's hot (19)

A.Dionisi Thesis
A.Dionisi ThesisA.Dionisi Thesis
A.Dionisi Thesis
 
Tesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGPTesi Triennale - X509 e PGP
Tesi Triennale - X509 e PGP
 
Tesi Laurea Sergio Taddia
Tesi Laurea Sergio TaddiaTesi Laurea Sergio Taddia
Tesi Laurea Sergio Taddia
 
Modellazione della dinamica di un liquido bifase mediante GPU CUDA
Modellazione della dinamica di un liquido bifase mediante GPU CUDAModellazione della dinamica di un liquido bifase mediante GPU CUDA
Modellazione della dinamica di un liquido bifase mediante GPU CUDA
 
Dynamic Scheduling
Dynamic SchedulingDynamic Scheduling
Dynamic Scheduling
 
Profilazione utente in ambienti virtualizzati
Profilazione utente in ambienti virtualizzatiProfilazione utente in ambienti virtualizzati
Profilazione utente in ambienti virtualizzati
 
Inoltro di pacchetti ip in sistemi linux
Inoltro di pacchetti ip in sistemi linuxInoltro di pacchetti ip in sistemi linux
Inoltro di pacchetti ip in sistemi linux
 
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
 
repairpdf_Oy51nCFX
repairpdf_Oy51nCFXrepairpdf_Oy51nCFX
repairpdf_Oy51nCFX
 
Interfaccia utente basata su eye-tracking per sistemi di controllo ambientale
Interfaccia utente basata su eye-tracking per sistemi di controllo ambientaleInterfaccia utente basata su eye-tracking per sistemi di controllo ambientale
Interfaccia utente basata su eye-tracking per sistemi di controllo ambientale
 
Progetto e realizzazione di un kernel linux per il controllo dinamico degli s...
Progetto e realizzazione di un kernel linux per il controllo dinamico degli s...Progetto e realizzazione di un kernel linux per il controllo dinamico degli s...
Progetto e realizzazione di un kernel linux per il controllo dinamico degli s...
 
Monitoraggio di applicazioni software mediante modelli di Markov
Monitoraggio di applicazioni software mediante modelli di MarkovMonitoraggio di applicazioni software mediante modelli di Markov
Monitoraggio di applicazioni software mediante modelli di Markov
 
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
 
Il mio libro - My book (intro)
Il mio libro - My book (intro)Il mio libro - My book (intro)
Il mio libro - My book (intro)
 
Il Linux OpenSound System
Il Linux OpenSound SystemIl Linux OpenSound System
Il Linux OpenSound System
 
MARKETING ED ECOMMERCE NELL’EDITORIA: IL CASO TRADING LIBRARY
MARKETING ED ECOMMERCE NELL’EDITORIA: IL CASO TRADING LIBRARYMARKETING ED ECOMMERCE NELL’EDITORIA: IL CASO TRADING LIBRARY
MARKETING ED ECOMMERCE NELL’EDITORIA: IL CASO TRADING LIBRARY
 
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
 
Caratterizzazione di un rivelatore a piatti resistivi (RPC)
Caratterizzazione di un rivelatore a piatti resistivi (RPC)Caratterizzazione di un rivelatore a piatti resistivi (RPC)
Caratterizzazione di un rivelatore a piatti resistivi (RPC)
 
Porting evolutivo di un’applicazione per la gestione di note spese in ambient...
Porting evolutivo di un’applicazione per la gestione di note spese in ambient...Porting evolutivo di un’applicazione per la gestione di note spese in ambient...
Porting evolutivo di un’applicazione per la gestione di note spese in ambient...
 

Viewers also liked

Konposizioaz
KonposizioazKonposizioaz
Konposizioaztakolo
 
Paisagens Suiças
Paisagens SuiçasPaisagens Suiças
Paisagens Suiçasdrvahl
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...artemedea
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...artemedea
 
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Stefano Costanzo
 
GWT vs CSS3
GWT vs CSS3GWT vs CSS3
GWT vs CSS3GWTcon
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

Viewers also liked (8)

Konposizioaz
KonposizioazKonposizioaz
Konposizioaz
 
Paisagens Suiças
Paisagens SuiçasPaisagens Suiças
Paisagens Suiças
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
 
Cultural studies
Cultural studiesCultural studies
Cultural studies
 
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
 
GWT vs CSS3
GWT vs CSS3GWT vs CSS3
GWT vs CSS3
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Similar to Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web

Imparare asp.net 107
Imparare asp.net 107Imparare asp.net 107
Imparare asp.net 107Pi Libri
 
Anomaly detection in network traffic flows with big data analysis techniques
Anomaly detection in network traffic flows with big data analysis techniques Anomaly detection in network traffic flows with big data analysis techniques
Anomaly detection in network traffic flows with big data analysis techniques Maurizio Cacace
 
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointSviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointDenis Tomada
 
Tesi di Laurea sulla Sicurezza delle Reti Informatiche: Le vulnerabilità
Tesi di Laurea sulla Sicurezza delle Reti Informatiche: Le vulnerabilitàTesi di Laurea sulla Sicurezza delle Reti Informatiche: Le vulnerabilità
Tesi di Laurea sulla Sicurezza delle Reti Informatiche: Le vulnerabilitàRiccardo Melioli
 
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...Ce.Se.N.A. Security
 
GaPiL - Guida alla Programmazione in Linux
GaPiL - Guida alla Programmazione in LinuxGaPiL - Guida alla Programmazione in Linux
GaPiL - Guida alla Programmazione in LinuxAmmLibera AL
 
Sviluppo di un sistema per il monitoraggio ambientale basato su reti di senso...
Sviluppo di un sistema per il monitoraggio ambientale basato su reti di senso...Sviluppo di un sistema per il monitoraggio ambientale basato su reti di senso...
Sviluppo di un sistema per il monitoraggio ambientale basato su reti di senso...Domenico Schillaci
 
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...Idriss Riouak
 
Implementazione di protocolli e simulatori MATLAB per lo sviluppo del livello...
Implementazione di protocolli e simulatori MATLAB per lo sviluppo del livello...Implementazione di protocolli e simulatori MATLAB per lo sviluppo del livello...
Implementazione di protocolli e simulatori MATLAB per lo sviluppo del livello...michael_mozzon
 
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsLorenzo Stacchio
 
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...Daniele Ciriello
 
Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)Ministry of Public Education
 
Un metodo di progettazione di reti locali con esigenze di qualità del servizio
Un metodo di progettazione di reti locali con esigenze di qualità del servizioUn metodo di progettazione di reti locali con esigenze di qualità del servizio
Un metodo di progettazione di reti locali con esigenze di qualità del servizioClaudio Bortone
 
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Luca Bressan
 

Similar to Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web (18)

Imparare asp.net 107
Imparare asp.net 107Imparare asp.net 107
Imparare asp.net 107
 
Anomaly detection in network traffic flows with big data analysis techniques
Anomaly detection in network traffic flows with big data analysis techniques Anomaly detection in network traffic flows with big data analysis techniques
Anomaly detection in network traffic flows with big data analysis techniques
 
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointSviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
 
Tesi di Laurea sulla Sicurezza delle Reti Informatiche: Le vulnerabilità
Tesi di Laurea sulla Sicurezza delle Reti Informatiche: Le vulnerabilitàTesi di Laurea sulla Sicurezza delle Reti Informatiche: Le vulnerabilità
Tesi di Laurea sulla Sicurezza delle Reti Informatiche: Le vulnerabilità
 
Sat howto
Sat howtoSat howto
Sat howto
 
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...
Rilevamento di attacchi di rete tramite protocolli di monitoraggio per router...
 
Compas Project
Compas ProjectCompas Project
Compas Project
 
GaPiL - Guida alla Programmazione in Linux
GaPiL - Guida alla Programmazione in LinuxGaPiL - Guida alla Programmazione in Linux
GaPiL - Guida alla Programmazione in Linux
 
Sviluppo di un sistema per il monitoraggio ambientale basato su reti di senso...
Sviluppo di un sistema per il monitoraggio ambientale basato su reti di senso...Sviluppo di un sistema per il monitoraggio ambientale basato su reti di senso...
Sviluppo di un sistema per il monitoraggio ambientale basato su reti di senso...
 
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
 
Implementazione di protocolli e simulatori MATLAB per lo sviluppo del livello...
Implementazione di protocolli e simulatori MATLAB per lo sviluppo del livello...Implementazione di protocolli e simulatori MATLAB per lo sviluppo del livello...
Implementazione di protocolli e simulatori MATLAB per lo sviluppo del livello...
 
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistems
 
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
 
Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)Piano Nazionale Scuola Digitale (risorse integrative)
Piano Nazionale Scuola Digitale (risorse integrative)
 
Tesiandroid
TesiandroidTesiandroid
Tesiandroid
 
Un metodo di progettazione di reti locali con esigenze di qualità del servizio
Un metodo di progettazione di reti locali con esigenze di qualità del servizioUn metodo di progettazione di reti locali con esigenze di qualità del servizio
Un metodo di progettazione di reti locali con esigenze di qualità del servizio
 
domenicoCaputiTriennale
domenicoCaputiTriennaledomenicoCaputiTriennale
domenicoCaputiTriennale
 
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
 

Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web

  • 1. ` UNIVERSITA DEGLI STUDI DI TRIESTE ` FACOLTA DI INGEGNERIA Corso di laurea specialistica in Ingegneria Informatica Tesi di laurea in Complementi di Reti di Calcolatori Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web LAUREANDA RELATORE Sara Zambon Chiar.mo Prof. Alberto Bartoli CORRELATORE Ing. Eric Medvet Anno Accademico 2008/2009
  • 2.
  • 4.
  • 5. Indice 1 Introduzione 1 2 Script JavaScript frame e iframe 3 2.1 Stato attuale di sicurezza nel Web . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2.1 L’elemento script . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3.1 Le caratteristiche di JavaScript . . . . . . . . . . . . . . . . . . . . 6 2.3.1.1 Esempio di codice JavaScript . . . . . . . . . . . . . . . . 6 2.4 Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4.1 L’elemento frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4.1.1 Esempio di un documento composto da tre frame . . . . 8 2.5 Inline Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.5.1 L’elemento iframe . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.5.1.1 Esempio di un iframe . . . . . . . . . . . . . . . . . . . . 9 2.6 Quesiti preliminari allo studio . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.6.1 I cinque quesiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3 Il dataset 13 3.1 Le fonti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.1 La fonte per le pagine Normal . . . . . . . . . . . . . . . . . . . . . 13 3.1.1.1 Alexa Top Sites . . . . . . . . . . . . . . . . . . . . . . . 14 3.1.2 La fonte per le pagine Malicious . . . . . . . . . . . . . . . . . . . 14 3.1.2.1 Malware Domain List . . . . . . . . . . . . . . . . . . . . 14 3.1.3 La fonte per le pagine Interesting . . . . . . . . . . . . . . . . . . . 15 3.2 Metodologia di scaricamento delle pagine . . . . . . . . . . . . . . . . . . 15 3.2.1 Definizioni generali . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.2 Nostre definizioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2.3 Goldrake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.3 Dimensione complessiva del dataset . . . . . . . . . . . . . . . . . . . . . . 17 v
  • 6. INDICE vi 4 Metodologia di analisi 19 4.1 Suddivisione del dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.1.1 La tabella degli script . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.1.1.1 Lo script: dalla pagina alla tabella . . . . . . . . . . . . . 21 4.1.2 La tabella dei frame e degli iframe . . . . . . . . . . . . . . . . . . 23 4.1.2.1 L’iframe: dalla pagina alla tabella . . . . . . . . . . . . . 24 4.2 Analisi sugli script e sugli iframe . . . . . . . . . . . . . . . . . . . . . . . 25 4.2.1 Propriet` estratte dagli script . . . . . . . . a . . . . . . . . . . . . . 25 4.2.2 Propriet` estratte dai frame e dagli iframe . a . . . . . . . . . . . . . 26 5 Offuscamento 27 5.1 Definizione di offuscamento . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2 Programmi atti all’offuscamento . . . . . . . . . . . . . . . . . . . . . . . 28 5.3 Programmi per offuscare codice JavaScript . . . . . . . . . . . . . . . . . . 28 5.3.1 Primo esempio di funzionamento di un JavaScript obfuscator . . . 29 5.3.2 Secondo esempio di funzionamento di un JavaScript obfuscator . . 30 5.4 JavaScript come veicolo di contenuti maligni . . . . . . . . . . . . . . . . . 31 5.5 Script JavaScript offuscati e maligni . . . . . . . . . . . . . . . . . . . . . 32 5.6 Eval, cardine nell’offuscamento automatico . . . . . . . . . . . . . . . . . 34 5.6.1 Funzioni alla base dell’offuscamento . . . . . . . . . . . . . . . . . 34 5.6.1.1 Semplice tecnica di deoffuscamento . . . . . . . . . . . . 34 5.6.2 Alternative alla funzione eval() . . . . . . . . . . . . . . . . . . . 34 5.7 Esempi di codici offuscati . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.7.1 Primo esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.7.2 Secondo esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.8 Iframe invisibili e maligni . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.8.1 Caratteristiche comuni ad iframe maligni . . . . . . . . . . . . . . 38 5.9 La nostra analisi sull’offuscamento . . . . . . . . . . . . . . . . . . . . . . 39 5.9.1 Propriet` offuscate degli script . . . . . . . . . . . . . . . . . . a . . 40 5.9.1.1 Definizione di sequenza offuscata . . . . . . . . . . . . . . 40 5.9.2 Il concetto di propriet` offuscata . . . . . . . . . . . . . . . . . a . . 41 5.9.3 Esempi di propriet` offuscate . . . . . . . . . . . . . . . . . . . a . . 42 5.9.3.1 Funzioni con nome offuscato . . . . . . . . . . . . . . . . 42 5.9.3.2 Varibili con nome offuscato . . . . . . . . . . . . . . . . . 42 5.9.3.3 Variabile con argomento offuscato . . . . . . . . . . . . . 44 5.9.3.4 document.write() con argomento offuscato . . . . . . . 44 5.9.3.5 iframe con argomento offuscato . . . . . . . . . . . . . . 44 5.9.3.6 iframe invisibile . . . . . . . . . . . . . . . . . . . . . . . 44 5.9.3.7 Stringa con argomento offuscato . . . . . . . . . . . . . . 45 5.9.3.8 Stringa lunga priva di punteggiatura . . . . . . . . . . . . 45 5.9.3.9 eval() con argomento offuscato . . . . . . . . . . . . . . 45 5.9.3.10 unescape() con argomento offuscato . . . . . . . . . . . 46 5.9.4 Il test con gli analisti . . . . . . . . . . . . . . . . . . . . . . . . . . 46
  • 7. vii INDICE 5.10 Due criteri di offuscamento per gli script . . . . . . . . . . . . . . . . . . . 47 6 Analisi 51 6.1 Caratterizzazione generale . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.1.1 Caratterizzazione a livello pagina . . . . . . . . . . . . . . . . . . . 51 6.1.2 Caratterizzazione a livello script . . . . . . . . . . . . . . . . . . . 53 6.2 Inclusione di script da url diversi . . . . . . . . . . . . . . . . . . . . . . . 53 6.3 Massima profondit` di inclusione degli script . . . . . . . . . . . a . . . . . 54 6.3.1 Massima profondit` osservata a livello pagina . . . . . . . a . . . . . 54 6.3.2 Massima profondit` osservata a livello script . . . . . . . a . . . . . 56 6.4 Utilizzo di eval() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.4.1 Diffusione generale dell’utilizzo di eval() . . . . . . . . . . . . . . 57 6.4.2 Diffusione dell’utilizzo di eval() con argomento lungo . . . . . . . 58 6.4.3 Diffusione dell’utilizzo di eval() con argomento offuscato . . . . . 59 6.5 Utilizzo di iframe sospettosamente piccoli . . . . . . . . . . . . . . . . . . 59 6.6 Utilizzo di tecniche di offuscamento . . . . . . . . . . . . . . . . . . . . . . 60 6.6.1 Diffusione dell’utilizzo di unescape() . . . . . . . . . . . . . . . . 62 6.6.2 Relazioni fra le features di offuscamento delle propriet` . a . . . . . 63 7 Conclusioni e sviluppi futuri 65 A Il codice 69 A.1 Oggetto PageAnalizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 A.1.1 Metodi dell’oggetto PageAnalizer . . . . . . . . . . . . . . . . . . 69 A.2 Oggetto ScriptAnalizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 A.2.1 Metodi dell’oggetto ScriptAnalizer . . . . . . . . . . . . . . . . . 70 A.3 Oggetto FrameAndIframeAnalizer . . . . . . . . . . . . . . . . . . . . . . 71 A.3.1 Metodi dell’oggetto FrameAndIframeAnalizer . . . . . . . . . . . 71 Bibliografia e siti web consultati 73 Ringraziamenti 75
  • 8.
  • 9. Elenco dei codici 2.1 Esempio di codice JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 Esempio di un documento composto da tre frame . . . . . . . . . . . . . . 8 2.3 Esempio di un iframe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.1 Codice dello script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.2 Codice dello script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.3 Codice dell’iframe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.1 Frammento di codice JavaScript da offuscare . . . . . . . . . . . . . . . . 29 5.2 Stesso frammento di codice JavaScript dopo l’offuscamento . . . . . . . . 29 5.3 Frammento di codice JavaScript da offuscare . . . . . . . . . . . . . . . . 30 5.4 Stesso frammento di codice JavaScript dopo l’offuscamento . . . . . . . . 31 5.5 Codice dello script presente nelle pagine infette . . . . . . . . . . . . . . . 33 5.6 Creazione dinamica di una variabile tramite la funzione eval() . . . . . . 35 5.7 Creazione dinamica di una variabile tramite l’oggetto window . . . . . . . 35 5.8 Codice dello script di terzo livello . . . . . . . . . . . . . . . . . . . . . . . 36 5.9 Codice dello script di secondo livello . . . . . . . . . . . . . . . . . . . . . 36 5.10 Codice dello script di primo livello . . . . . . . . . . . . . . . . . . . . . . 36 5.11 Iframe dalle dimensioni nulle . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.12 Script puntato dal precedente iframe . . . . . . . . . . . . . . . . . . . . . 37 5.13 Codice dello script deoffuscato . . . . . . . . . . . . . . . . . . . . . . . . 37 5.14 Iframe reso invisibile dalle dimensioni nulle (width=0 e height=0). . . . . 38 5.15 Iframe reso invisibile da un’unica dimesione nulla (height=0). . . . . . . . 38 5.16 Iframe di dimensioni minime e dunque difficilmente percepibile. . . . . . . 39 5.17 Iframe reso invisibile dall’attributo visibility:hidden. . . . . . . . . . . 39 5.18 Iframe non visibile perch` interno a un “contenitore” <div> invisibile. e . . 39 5.19 Argomento offuscato di una variabile . . . . . . . . . . . . . . . . . . . . . 44 5.20 Argomento offuscato di un document.write() . . . . . . . . . . . . . . . 44 5.21 Argomento offuscato di un iframe . . . . . . . . . . . . . . . . . . . . . . 44 5.22 iframe con gli attributi width e height nulli . . . . . . . . . . . . . . . . 44 5.23 Argomento offuscato di una stringa . . . . . . . . . . . . . . . . . . . . . . 45 5.24 Argomento offuscato di una stringa lunga . . . . . . . . . . . . . . . . . . 45 ix
  • 10. ELENCO DEI CODICI x 5.25 Argomento offuscato di un eval() . . . . . . . . . . . . . . . . . . . . . . 45 5.26 Argomento offuscato di un unescape() . . . . . . . . . . . . . . . . . . . 46
  • 11. Elenco delle figure 2.1 Finestra visualizzata grazie allo script . . . . . . . . . . . . . . . . . . . . 7 2.2 Inserimento dei dati da inviare all’applicazione . . . . . . . . . . . . . . . 7 2.3 Finestra che si apre a seguito dell’interazione fra utente e applicazione . . 7 2.4 Pagina web composta da tre frame . . . . . . . . . . . . . . . . . . . . . . 9 2.5 Iframe ospitato all’interno di una pagina web . . . . . . . . . . . . . . . . 10 4.1 Home page di Amazon visualizzata tramite un browser . . . . . . . . . . . 22 5.1 Drive-by download a seguito di un attacco browser exploit . . . . . . . . . 40 6.1 Grafici di distribuzione sul numero di script inclusi per pagina . . . . . . . 52 6.2 Grafici di distribuzione cumulativa sulla somma delle dimensioni degli script per pagina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.3 Grafici di distribuzione cumulativa sulla dimensione degli script in caratteri 53 6.4 Grafici di distribuzione sull’inclusione di script da domini diversi . . . . . 54 6.5 Grafici di distribuzione sulla massima profondit` senza redirezioni per il a numero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.6 Grafici di distribuzione sulla massima profondit` con redirezioni per il a numero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.7 Grafici di distribuzione sulla massima profondit` senza redirezioni per la a percentuale di script calcolata sulla numero assoluto degli stessi . . . . . . 56 6.8 Grafici di distribuzione sulla massima profondit` senza redirezioni per la a percentuale di script calcolata sulla dimensione degli stessi . . . . . . . . . 57 6.9 Grafico a barre sull’utilizzo di eval() . . . . . . . . . . . . . . . . . . . . 58 6.10 Grafico a barre sull’utilizzo di eval() con argomento superiore a 140 caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.11 Grafico a barre sull’utilizzo di eval() con argomento offuscato . . . . . . 59 6.12 Grafico di distribuzione sull’utilizzo di iframe con dimensioni minori di 3px * 3px per la percentuale di pagine Normal . . . . . . . . . . . . . . . 60 xi
  • 12. ELENCO DELLE FIGURE xii 6.13 Grafico a barre sulla percentuale di script offuscati ricavata tramite il classificatore MLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6.14 Grafico a barre sulla percentuale di script offuscati ricavata tramite il classificatore basato sulle soglie . . . . . . . . . . . . . . . . . . . . . . . . 61 6.15 Grafico a barre sull’utilizzo di unescape() . . . . . . . . . . . . . . . . . . 62 6.16 Grafico a barre sull’utilizzo di unescape() con argomento offuscato . . . . 62 6.17 Matrice dei diagrammi di dispersione . . . . . . . . . . . . . . . . . . . . . 63
  • 13. Elenco delle tabelle 5.1 Propriet` e relative condizioni di offuscamento . . . . . . . . . . . a . . . . 43 5.2 Percentuali di giudizi comuni associate agli script . . . . . . . . . . . . . . 48 5.3 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.4 Soglie sulle features per il secondo bit di offuscamento dello script . . . . 50 xiii
  • 14.
  • 15. Capitolo 1 Introduzione Il Web ha subito una totale trasformazione, passando da semplice infrastruttura per l’accesso a dati remoti a complesso sistema contraddistinto da una spiccata interazio- ne con l’utente. I fruitori di servizi web sono quotidianamente subissati da contenuti provenienti dai siti visitati. Tali contenuti spesso consistono in codice che dev’essere eseguito sui sistemi client, operazione che ormai risulta essere essenziale per usufruire delle funzionalit` di cui i moderni siti sono provvisti. a Lo scenario che ne deriva pu` assumere connotati inquietanti in termini di sicurezza o informatica. La navigazione fra le pagine di un affermato quotidiano online, solitamente ` percepita dall’utente come un’azione sicura. Ci` che forse ignora il visitatore ` che e o e il contenuto ricevuto spesso include una mix di codici provenienti da siti terzi, verso i quali egli ripone la propria fiducia senza, tuttavia, esserne a conoscenza. Un’ulteriore insidia per l’inconsapevole utente ` rappresentata da contenuti invisibili, e di solito iframe, o comunque sfuggevoli alla vista, i quali, ad esempio, sono in grado di inoltrare la navigazione verso siti poco raccomandabili se non addirittura diffusori di software dannoso per il sistema dell’utente. Un altro aspetto cruciale in questo panorama ` rappresentato dall’offuscamento. I e contenuti inviati ai vari client possono comprendere anche frammenti di codice offuscato, quindi codice deliberamente modificato al fine di renderne ardua l’analisi. Come verr` a meglio illustrato lungo questo elaborato, alla base dell’offuscamento del codice risiedo- no obiettivi discrepanti: dalla protezione della paternit` del codice, all’occultazione di a contenuti maligni. Prima di iniziare l’intera trattazione, si propone un esempio che presenta uno scenario in cui sono presenti tutti gli aspetti appena accennati. L’esempio ` tratto dal Google e Technical Report [1] pubblicato nel 2008. All’interno di una pagina web, appartenente ad un sito di una stazione radio olandese, durante la loro indagine, i ricercatori Google rilevarono la presenza di un’inserzione pubblicitaria che rimandava ad un sito tedesco. Tramite una porzione di codice JavaScript, l’utente veniva inoltrato verso un altro sito pubblicitario negli Stati Uniti che a sua volta reindirizzava la navigazione verso i Paesi Bassi. Il viaggio dell’utente procedeva fino ad un nuovo sito, sempre nella stessa zona, dal 1
  • 16. 1. Introduzione 2 quale veniva scaricato uno script offuscato che puntava ad un’ulteriore script localizzato in Austria. Quest’ultimo indirizzava il browser dell’utente, tramite una catena di iframe, verso il sito finale che provocava lo scaricamento automatico di sofware dannoso sul sistema client. L’estrema rilevanza di questi fenomeni nel Web e le enormi dimensioni potenzialmen- te raggiungibili dai loro effetti in termini di sicurezza, mettono in risalto l’importanza del nostro lavoro di ricerca che ha avuto come obiettivo la caratterizzazione dei fatti citati. Nel panorama odierno l’attenzione di cui essi godono ` talmente modesta da sottostimar- e ne l’importanza; infatti, ci sono ancora molte domande alle quali non ` stato risposto in e maniera adeguata. Ad esempio, non si trovano studi che chiariscano quanto sia diffuso l’utilizzo del codice offuscato all’interno delle pagine web o che relazione sussista, nel caso ve ne sia una, fra offuscamento e pagine sospette oppure ancora se l’offuscamento si riscontri pi` frequentemente nei codici inclusi da altri domini. Una conoscenza lacunosa u avvolge anche questioni che sorgono attorno alla diffusione dell’impiego dei contenuti invisibili precedentemente menzionati oppure di eval, una discussa funzione JavaScript, potenzialmente in grado di compiere qualsiasi azione e per questo assisa al ruolo di musa ispiratrice da una folta schiera di criminali informatici. Per tentare di fornire una risposta a queste domande, abbiamo scelto di condurre le nostre analisi su un migliaio di pagine collezionate in maniera oculata al fine di ottenere una plausibile rappresentazione del Web. Da ciascuna pagina abbiamo prelevato script, frame e iframe contenuti nella pagina stessa o richiamati da fonti esterne, ottenendo di conseguenza i tre elementi cardine della nostra indagine. Durante lo scaricamento delle pagine, per ognuno dei tre elementi, oltre al puro codice, si ` tenuto traccia di tutti gli e URL attraversati per raggiungere effettivamente quel contenuto. Una volta completato l’intero download, abbiamo dato avvio al nostro studio estraen- do da ciascun codice in nostro possesso un set di propriet` relative, ad esempio, alla defi- a nizione di funzioni da parte del programmatore, oppure all’utilizzo di particolari costrutti o funzioni JavaScript. Analizzando e compiendo specifiche elaborazioni sui dati derivati dallo scaricamento e su quelli estratti dai vari codici, abbiamo cercato di rispondere alle domande iniziali.
  • 17. Capitolo 2 Script JavaScript frame e iframe Il crescente aumento di applicazioni online che permettono uno spiccato livello d’in- terazione con l’utente, come ad esempio blog, forum, chat e sistemi quali Wikipedia, Youtube, Facebook, Myspace, Twitter, Gmail, Wordpress, Tripadvisor, ha portato con s` l’inevitabile incremento dell’utilizzo di script, frammenti di codice che consentono e concretamente l’interazione. L’utilizzo di queste tecniche nasconde purtoppo un rovescio della medaglia. Infatti, se da un lato questi strumenti sono forieri di vantaggi notevoli, i quali hanno dato vita a una nuova era per il Web, che viene definita 2.0 per marcare il confine tra l’accezione statica precedente e quella dinamica attuale, dall’altro offrono nuovi mezzi per alcuni tipi di attacchi informatici. Da queste considerazioni ha preso spunto la nostra attivit` di ricerca, la cui materia a d’indagine ` rappresentata da script JavaScript, frame e iframe. e Nella prima parte del capitolo, dopo una panoramica sulla situazione attuale in termini di sicurezza informatica, si forniscono al lettore alcune definizioni introduttive all’argomento; di seguito a questa, vengono esposti i quesiti attorno a script JavaScript, frame e iframe, dai quali ha avuto origine l’intero studio. 2.1 Stato attuale di sicurezza nel Web Prima di entrare nel vivo di script, frame e iframe, in questa sezione si elencano alcuni fra i risultati della ricerca “Websense Security Labs, State of Internet Security, Q1-Q2 2009”[9], effettuata dall’azienda Websense1 sullo stato di sicurezza nel web e pubblicata nel settembre 2009: 1 Websense, Inc.: azienda californiana che opera nel settore delle tecnologie integrate di protezione Web, email e Dati. L’azienda produce soluzioni che mirano a bloccare i codici malevoli, a impedire la perdita di informazioni confidenziali e a configurare policy di sicurezza sull’utilizzo di Internet. Ogni ora Websense R Security LabsTM ThreatSeekerTM Network analizza oltre 40 milioni di siti Web e dieci milioni di email per identificare contenuti indesiderati e malicious code. 3
  • 18. 2. Script JavaScript frame e iframe 4 • Websense R Security LabsTM ha registrato una crescita del 233% del numero di siti Internet malicious nel corso degli ultimi sei mesi e una crescita del 671% di questi nell’ultimo anno; • nella prima met` del 2009, il 77% dei siti Web con malicious code erano costituiti a da siti Internet affidabili che sono stati compromessi. Questa percentuale elevata `e stata causata in particolare negli ultimi sei mesi da alcuni attacchi quali Gumblar (vedi sezione 5.5 a pagina 32), Beladen e Nine Ball che hanno compromesso siti Web considerati altamente affidabili attraverso una serie di attacchi a catena; • i siti Web 2.0 che consentono contenuti generati dagli utenti finali sono un target importante per i cybercriminali e gli spammer. La tecnologia Websense DefensioTM ha consentito ai Websense R Security LabsTM di stabilire che il 95% dei commenti generati dagli utenti di blog, chat room e bacheche sono spam2 o malicious. • gli sforzi dei siti Web 2.0 di rendere le proprie pagine sicure sono risultati non efficaci. La ricerca Websense infatti dimostra che i tool di sicurezza utilizzati da siti quali YouTube e BlogSpot sono dal 65% al 75% inefficaci nel proteggere gli utenti Web da contenuti pericolosi e rischi relativi alla sicurezza. • il 69% di tutte le pagine Internet con contenuti classificati come inappropriati (contenuti pornografici, gioco d’azzardo, droghe) contenevano almeno un link ma- licious. Il dato diventa ancora pi` significativo con il 78% dei nuovi siti Internet u scoperti nella prima met` del 2009 che contiene almeno un link pericoloso; a • Websense R Security LabsTM ha riscontrato che il 37% degli attacchi Web hanno l’obiettivo di sottrarre dati e informazioni personali fondamentali degli utenti; • il Web continua ad essere il vettore preferito per il furto di dati. Nella prima met` a del 2009 i Websense Security Labs hanno constatato che il 57% degli attacchi che avevano come obiettivo il furto di dati erano stati condotti attraverso la Rete; • la convergenza di attacchi misti Web ed email continua a crescere. Secondo Websense R Security LabsTM , l’85,6% di tutta la posta indesiderata in circolazione contiene link a siti di spam e/o a siti Web pericolosi; • solamente a giugno il numero totale di email che contenevano virus ` cresciuta del e 600% rispetto al mese precedente. 2.2 Script Uno script lato client ` un programma che pu` accompagnare un documento HTML e o oppure essere incorporato direttamente in esso. Il programma viene eseguito sulla mac- china client quando viene caricato il documento, o in un secondo tempo, per esempio 2 Spam: messaggi indesiderati generalmente a scopi pubblicitari. Con spamming si indica l’invio di grandi quantit` di questo genere di messaggi solitamente tramite email. a
  • 19. 5 JavaScript quando viene attivato un collegamento. Gli script offrono ai progettisti alcuni mezzi per estendere i documenti HTML in maniera attiva e interattiva. Le caratteristiche di uno script possono essere cos` elencate: ı • gli script possono essere attivati da eventi che coinvolgono il documento, come il caricamento, lo scaricamento, la focalizzazione di elementi, movimenti del mouse, e cos` via; ı • gli script possono essere collegati a controlli, come i bottoni, per produrre gli elementi di interfaccia; • gli script possono processare i dati appena vengono immessi dall’utente all’interno di form. 2.2.1 L’elemento script Il tag <script> pone uno script all’interno di un documento. Gli attributi pricipali di questo tag sono: • src: attributo che specifica la locazione di uno script esterno al documento, quindi l’URL3 tramite cui recuperare lo script; se l’attributo non ` impostato, il contenuto e dello script ` definito all’interno dell’elemento stesso; e • type: attributo che specifica il linguaggio di scripting per il contenuto dell’elemen- to. Il linguaggio di scripting ` indicato come un tipo di contenuto (per esempio e type="text/javascript"); • language: valore che contiene l’identificatore del linguaggio di scripting; poich´ gli e identificatori non sono standard, questo attributo ` stato “disapprovato” in favore e dell’attributo type. 2.3 JavaScript JavaScript ` un linguaggio di scripting orientato agli oggetti4 comunemente utilizzato e nei siti web. Fu originariamente sviluppato da Brendan Eich della Netscape Communications con il nome di Mocha e successivamente di LiveScript, ma in seguito ` stato rinominato e JavaScript ed ` stato formalizzato con una sintassi pi` vicina a quella del linguaggio e u Java di Sun Microsystems. JavaScript ` stato standardizzato per la prima volta tra il e 1997 e il 1999 dalla ECMA con il nome ECMAScript. L’ultimo standard, del dicembre 3 URL: Uniform Resource Locator, sequenza di caratteri che identifica univocamente l’indirizzo di una risorsa in Internet. 4 Programmazione orientata agli oggetti: paradigma di programmazione che prevede di raggruppare in un’unica entit` (la classe) sia le strutture dati che le procedure che operano su di esse, creando per a l’appunto un oggetto software dotato di propriet` (dati) e metodi (procedure) che operano sui dati dello a stesso.
  • 20. 2. Script JavaScript frame e iframe 6 ` 1999, ` ECMA-262 Edition 3, e corrisponde a JavaScript 1.5. E anche uno standard e ISO. 2.3.1 Le caratteristiche di JavaScript La caratteristica principale di JavaScript ` quella di essere un linguaggio interpretato. e Il codice quindi non viene compilato bens` c’` un interprete (in JavaScript lato client ı e esso ` incluso nel browser) che esegue riga per riga, a tempo di esecuzione, quanto e trascritto nello script. JavaScript presenta quindi tutte le caratteristiche di un normale linguaggio interpretato con una sintassi analoga a quella di un linguaggio compilato (essa ` relativamente simile a quella del C, del C++ e del Java), quindi con la possibilit` di e a utilizzare funzionalit` tipiche dei linguaggi di programmazione ad alto livello (strutture a di controllo, cicli, ecc.) e con in pi` anche la potenzialit` di definire strutture pi` u a u complesse, vicine a quelle adottate nei normali linguaggi orientati agli oggetti (definizione di costruttori, creazione di prototipi, istanziazione di oggetti). Poich´ il linguaggio JavaScript non ha propri costrutti di input o output, un in- e terprete JavaScript si basa su un programma ospite in cui ` integrato. Ci sono molti e programmi ospiti di questo tipo, di cui quelli relativi al Web sono gli esempi pi` noti. u JavaScript, se integrato in un web browser, si collega tramite interfacce DOM5 alle applicazioni, specialmente al lato server (web server) e al lato client (browser) delle applicazioni internet. Molti siti web usano la tecnologia JavaScript lato client per creare potenti applicazioni web dinamiche. Gli standard DOM imposti dal W3C6 non sempre vengono rispettati dai vari browser: browser diversi (anche a seconda del loro motore di rendering) espongono diversi oggetti o metodi allo script, quindi, ` spesso necessario implementare controlli aggiuntivi ad una e funzione JavaScript, per garantirne la compatibilit` con ciascun browser. La diversit` a a dei DOM dei browser pu` essere aggirata anche attraverso l’uso dell’istruzione eval(). o Questa funzione nativa valuta una stringa e la esegue come se fosse codice JavaScript. Un uso principale del JavaScript basato su web ` la scrittura di piccole funzioni e integrate nelle pagine HTML che interagiscono con il DOM del browser per compiere determinate azioni non possibili con il solo HTML statico come ad esempio controllare i valori nei campi di input, creare finestre pop-up nascondere o visualizzare determinati elementi. 2.3.1.1 Esempio di codice JavaScript 1 < script type = " text / javascript " > 5 DOM : Document Object Model, standard ufficiale di rappresentazione dei documenti strutturati come modello orientato agli oggetti. 6 W3C : World Wide Web Consortium, associazione fondata nel 1994 da Tim Berners Lee, padre del web, al MIT (Massachusetts Institute of Technology), in collaborazione con il CERN (Organizzazione Europea per la Ricerca Nucleare), con lo scopo di sviluppare tecnologie che garantiscano l’interoperabilit` a (specifiche, guidelines, software e applicazioni) per guidare il World Wide Web fino al massimo del suo potenziale.
  • 21. 7 Frame 2 function show_prompt () { 3 var name = prompt ( " Please enter your name " ," write here " ) ; 4 if ( name != null && name != " " ) { 5 alert ( " Hello " + name + " ! How are you today ? " ) ; 6 } 7 } 8 </ script > Codice 2.1: Esempio di codice JavaScript Figura 2.1: Finestra visualizzata grazie allo script Figura 2.2: Inserimento dei dati da inviare all’applicazione Figura 2.3: Finestra che si apre a seguito dell’interazione fra utente e applicazione 2.4 Frame Nelle pagine web si parla di frame quando una pagina ` scomposta in diverse sezioni e tra loro indipendenti. Frame ` anche il nome del tag HTML che indica ognuna di tali e sezioni. I frame HTML permettono ai progettisti di presentare i documenti in visualizzazioni multiple, che possono essere finestre indipendenti o sotto finestre. Le visualizzazioni
  • 22. 2. Script JavaScript frame e iframe 8 multiple offrono ai progettisti un modo per mantenere visibili certe informazioni, mentre altre visualizzazioni vengono fatte scorrere o rimpiazzate. Per esempio, all’interno della stessa finestra, un frame pu` visualizzare un banner statico, il secondo un men` di o u navigazione, e il terzo il documento principale che pu` essere fatto scorrere verso l’alto o o verso il basso, o che pu` essere rimpiazzato navigando tramite il secondo frame (vedi o Figura 2.4). L’obiettivo dei frame ` quello di evitare di dover riscrivere interamente ogni pagina e in tutte le sue componenti. Ci` risulta possibile suddividendo la pagina per lasciare o intatti, ad esempio, i frame con banner e men` e ricaricare solamente il contenuto del u frame centrale, permettendo cos` di gestire una mole di codice nettamente minore. ı 2.4.1 L’elemento frame Per poter creare una pagina con i frame viene utilizzato il tag HTML <frameset> che inizializza la struttura di una pagina con i frame. All’interno del tag <frameset> trova posto il tag <frame> i cui attributi principali sono: • id: identificativo del frame; • src: stringa che specifica quale pagina deve essere caricata all’interno del frame stesso. Gli attributi del tag <frameset> permettono di conferire le dimensioni ai frame e sono: • cols: valore che specifica la dimensione delle colonne di ogni frame; • rows: valore che specifica la dimensione delle righe di ogni frame; La struttura dei frame non necessita di trovarsi all’interno del tag HTML <body> ma deve essere inserita dopo il tag di chiusura </head>. 2.4.1.1 Esempio di un documento composto da tre frame 1 < html > 2 < head > 3 < title >A simple frameset document </ title > 4 </ head > 5 < frameset cols = " 20% ,80% " > 6 < frameset rows = " 100 ,200 " > 7 < frame src = " logoUnits . gif " > 8 < frame src = " menu . html " > 9 </ frameset > 10 < frame src = " http :// www . inginf . units . it / Home " > 11 </ frameset > 12 </ html > Codice 2.2: Esempio di un documento composto da tre frame
  • 23. 9 Inline Frame Figura 2.4: Pagina web composta da tre frame 2.5 Inline Frame Iframe sta per Inline frame e permette di inserire un frame anche in una pagina non strutturata in frame. A tale scopo ` sufficiente servirsi del tag <iframe>. e 2.5.1 L’elemento iframe I principali attributi dell’elemento iframe sono: • width: valore che specifica la larghezza dell’iframe da includere; • height: valore che specifica l’altezza dell’iframe da includere; • src: stringa che specifica il documento da caricare all’interno dell’iframe (anche un url esterno se necessario). Il tag <iframe>, inoltre, supporta tutti gli attributi del tag <frame>. L’elemento iframe, permettendo di inserire un frame all’interno di una sezione di testo, consente di includere un documento HTML dentro un altro. 2.5.1.1 Esempio di un iframe 1 < iframe src = " http :// www . units . it " width = " 820 " height = " 300 " > </ iframe > Codice 2.3: Esempio di un iframe
  • 24. 2. Script JavaScript frame e iframe 10 Figura 2.5: Iframe ospitato all’interno di una pagina web 2.6 Quesiti preliminari allo studio L’idea di intraprendere uno studio con l’obiettivo di realizzare una caratterizzazione di script JavaScript nel web, nasce in seno alla consapevolezza che sempre pi` spesso pagine u web ospitano script, per sfruttare l’interazione dinamica fra client e server. Questa ricerca ` stata mossa dalla volont` di rispondere a cinque macro quesiti, in e a modo tale da soddisfare l’intento di definire l’uso odierno di script JavaScript, frame e iframe nelle pagine web. Prima di esporre i quesiti ` doveroso introdurre alcuni concetti presenti in essi. Tali e concetti verranno chiariti e analizzati in maniera pi` approfondita nel corso di questo ela- u borato, ora viene proposta solamente un’anticipazione volta a garantire la comprensione delle domande. Sebbene non si trovi una definizione precisa di offuscamento, si pu` comunque affer- o mare che un codice offuscato ` un codice la cui sintassi originale ha subito delle modifiche e per essere resa pi` difficile da comprendere. I propositi che spingono un programmatore u ad offuscare il proprio codice risultano essere antitetici. Infatti, se da un lato l’offusca- mento viene utilizzato come mezzo per proteggere la paternit` del codice, dall’altro ` a e spesso impiegato dagli autori di software maligno per nascondere frammenti di codice nocivo che, ad esempio, possono dar luogo a browser exploits, in sostanza attacchi infor- matici che sfruttano un difetto o vulnerabilit` di un sistema operativo o di una parte di a software con l’intenzione di alterare le impostazioni del browser all’insaputa dell’utente, consentendo, ad esempio, il download automatico di componenti dannosi per il sistema
  • 25. 11 Quesiti preliminari allo studio o la sottrazione fraudolenta di dati privati. Come verr` meglio illustrato al capitolo 5, le tecniche che mirano ad offuscare il codi- a ce fanno frequente uso di espressioni regolari e operazioni su stringhe. Ci` ` reso possibile oe dall’utilizzo di alcune funzioni JavaScript native come escape() e unescape() che opera- no in maniera opposta, codificando e decodificando una stringa, ed eval() che completa il lavoro iniziato dalle precedenti eseguendo la stringa passatale come argomento. Gli esperti concordano sul fatto che tutt’oggi ci sia un ricorso abusivo dell’utilizzo della funzione eval()7 . Solo in una piccola percentuale di casi, infatti, l’utilizzo di eval() risulta essere indispensabile. Ci` si verifica quando, ad esempio, ` necessario o e realizzare complesse espressioni matematiche basate su input dell’utente o quando ` e necessario serializzare8 lo stato di un oggetto9 all’interno di una stringa affinch` possa e essere memorizzato, trasmesso e ricostruito nel seguito. Nella maggior parte delle situazioni, l’uso di eval() risulta essere scorretto e ten- denzialmente pericoloso. Infatti, spesso le potenzialit` di questa funzione non risultano a necessarie e comportano scarse perfomance del sistema. A tal riguardo si propone una considerazione. Il fatto che eval() esegua una stringa trattandola come codice, implica che a tempo di esecuzione venga effettuata una nuova compilazione ed interpretazione del codice, comportando cos` una notevole perdita in termini di prestazioni. ı Per ci` che concerne la pericolosit` di eval(), ` doveroso introdurre lo nozione di o a e code injection. Con questo termine si indica l’inserimento all’interno di un’applicazione (nel nostro caso un’applicazione web) di codice malevolo, eseguito dalla stessa in un secondo momento. Molti moderni linguaggi di scripting permettono la dynamic evaluation, che prevede l’utilizzo di funzioni come eval() per eseguire frammenti di codice ricavati a runtime. Essa, pensata soprattutto come scorciatoia per il programmatore, pu` rappresentare un o grave problema per la sicurezza dell’applicazione nel caso in cui il frammento di codice eseguito dinamicamente contenga dell’input non opportunamente validato. Si consideri, a questo proposito, un’applicazione web che faccia uso di eval() per va- lutare le richieste HTTP10 effettuate tramite il metodo GET. Tale metodo prevede che il valore del parametro, inserito dall’utente durante una richiesta, venga aggiunto all’URL preceduto da un ‘?’ (come http://www.website.com/evalpage.php?parameter). Nel caso in cui l’input non sia vagliato con estrema attenzione prima della valutazione, l’attac- cante pontenzialmente ` in grado di eseguire sul server qualsiasi comando semplicemente e inviando all’applicazione opportuni parametri tramite l’URL. 7 Per un’idea rispetto alla rilevanza dell’argomento, si propone al lettore di interrogare un motore di ricerca, come Google, con il gioco di parole “eval is evil”. 8 Serializzazione: processo di conversione di un oggetto in un flusso di byte per archiviarlo in memoria, in un database o in un file oppure per trasmetterlo su una connessione di rete. Lo scopo principale ` di e salvare lo stato di un oggetto al fine di poterlo ricreare identico tramite il processo inverso che prende il nome di deserializzazione. 9 Stato di un oggetto: valore di tutti i dati membro dell’oggetto considerato in un certo istante. 10 Richiesta HTTP : insieme di linee inviate al server dal client ad esempio per prelevare una pagina web. Per una maggiore spiegazione si rimanda al paragrafo 3.2.1 di pagina 15.
  • 26. 2. Script JavaScript frame e iframe 12 2.6.1 I cinque quesiti Vengono ora elencati in maniera schematica ed essenziale i cinque macro quesiti che rappresentano le linee guida del nostro studio. 1. Quanto ` diffusa l’inclusione di script da url diversi? e 2. A che profondit` di inclusione si arriva per includere script? a 3. Quanto ` diffuso l’utilizzo di eval()? e 4. Quanto ` diffusa l’inclusione di frame e iframe sospettosamente piccoli? e 5. Quanto ` diffuso l’utilizzo di tecniche di offuscamento? e Nei capitoli successivi verr` illustrato l’iter complessivo adottato (dalla raccolta del a dataset, all’individuazione dei parametri per l’analisi da compiere fino all’analisi vera e propria) per dar risposta a queste domande e ad altre pi` dettagliate ma sempre facenti u capo ai cinque cardini menzionati. In conclusione verranno esposte le deduzioni ricavate a seguito delle osservazioni condotte sui risultati ottenuti.
  • 27. Capitolo 3 Il dataset Per rispondere ai cinque macro quesiti esposti nella sottosezione 2.6.1 di pagina 12, abbiamo deciso di costruire un dataset di pagine che, grosso modo, rispecchiasse lo scenario attuale del Web. Nella fattispecie ` stato scelto di popolare il dataset mediante tre categorie di pagine e che riproducessero la reale divisione delle pagine nel Web. A tal scopo si ` stabilito di destinare l’80% del dataset a pagine ritenute normali e e auspicabilmente innocue, visitate quotidianamente da un alto tasso di utenti, mentre poco meno di un quinto del dataset ` stato riservato a pagine presumibilmente maligne e dal contenuto sospetto e probabilmente nocivo, ed infine una minima porzione di dataset ` stata popolata con pagine interessanti poich` volte a calcolare le prestazioni del web e e browser 1 dell’utente, sottoposto all’elaborazione di particolari script JavaScript. Si ` deciso di utilizzare tre diverse fonti dalle quali prelevare gli url delle pagine e da scaricare e analizzare. A seconda della fonte di provenienza sono state definite tre tipologie di pagina: Normal, Malicious ed Interesting. In questo capitolo vengono presentate le fonti impiegate, gli strumenti atti al down- load delle pagine, l’intervallo di scaricamento e la composizione finale del dataset. 3.1 Le fonti 3.1.1 La fonte per le pagine Normal La parte pi` consistente del dataset ` formata dalle pagine definite Normal. Si ` deciso u e e di far ricadere in questa categoria le home page dei siti web pi` visitati al mondo. Per u ottenere questo elenco ci si ` avvalsi della Top Milion Sites List stilata dall’azienda Alexa e Internet Inc. e scaricabile dal sito della stessa. Il campione di pagine Normal ` parte del milione. Nello specifico sono state selezio- e nate le prime mille della lista. 1 Web browser : programma che consente all’utente di navigare nel web e quindi di visualizzare e interagire con testi, immagini e altre informazioni, tipicamente contenute in una pagina web. 13
  • 28. 3. Il dataset 14 Data la facilit` di reperimento di questa tipologia di pagine, il download delle 1000 a Normal ha richiesto l’arco di una giornata per essere completato. Esso ha avuto successo nel 83,4% dei casi. In definitiva ` stato possibile compiere l’analisi su 834 pagine Normal. e 3.1.1.1 Alexa Top Sites La Alexa Internet Inc. ` un’azienda statunitense, fondata nel 1996, sussidiaria di Ama- e zon.com che si occupa di statistiche sul traffico di Internet. Alexa, abbreviazione di Address Lookup EXperts Authority, ` anche un motore di ricerca con un servizio di web e directory [5]. Alexa classifica i siti basandosi sulle visite effettuate dagli utenti della Alexa Toolbar, per Internet Explorer, e dalle barre degli strumenti integrate in Mozilla e Netscape. Una volta installata, la toolbar memorizza i dati relativi al traffico del browser e li invia al web service di Alexa che li immagazzina e analizza al fine di creare le proprie statistiche [4]. A partire dal 1996 si contano oltre 10 milioni di toolbar installate anche se la compagnia non fornisce il numero esatto [5]. Alexa rende disponibile la lista Top Sites per nazione, lingua o categoria. La lista classifica il milione di siti maggiormente visitati e ordinati secondo l’Alexa Traffic Rank. 3.1.2 La fonte per le pagine Malicious Per ci` che concerne le pagine pertinenti la tipologia Malicious, la scelta della fonte ` o e stata fatta ricadere sulla lista dei siti infettati da malware redatta dal progetto Malware Domain List e pubblicata sul sito dello stesso: www.malwaredomainlist.com. Le pagine Malicious sono state segnate da un intervallo di scaricamento dilatato nel tempo. Questo fatto ` stato reso necessario da due fattori: l’impossibilit` di pos- e a sedere un numero congruo di url da scaricare nel medesimo momento e la frequente difficolt` riscontrata nel download, presumibilmente dovuta alla rimozione delle pagine a incriminate. Durante l’arco di due mesi, quotidianamente ` stata visionata la lista pubblicata sul e sito www.malwaredomainlist.com e da quella sono stati estratti i nuovi url presenti. Si ` scelto di scaricare tutti gli url raccolti nell’elenco ad eccezione di quelli laddove e l’estensione della risorsa indicava che l’url in questione si riferiva ad un programma eseguibile. 3.1.2.1 Malware Domain List Malware Domain List ` un progetto non a fini commerciali nato nel luglio 2007, grazie e all’impegno di alcuni volontari. Il progetto mantiene aggiornata una lista di domini che vengono scoperti propagare malware e spyware all’interno del web. Tra le altre informazioni presenti nella lista, ad ogni dominio sono associati la data e l’ora d’inserimento nell’elenco, la descrizione del malware diffuso, l’ip e la ragione sociale con la quale il dominio ` registrato. e
  • 29. 15 Metodologia di scaricamento delle pagine Dopo previa iscrizione al progetto, chiunque ha la possibilit` di collaborare all’ag- a giornamento della lista di domini maligni. Gli URL notificati dai collaboratori, prima di essere inseriti nell’elenco, passano al vaglio degli amministratori del progetto. Oltre a ci` la lista viene mantenuta anche grazie alla cooperazione con altri siti operanti nello o stesso campo, come www.malwareurl.com e www.hosts-file.net. A questo progetto si appoggiano sia ricercatori che internet service provider2 per smascherare e debellare i siti divulgatori di malware. 3.1.3 La fonte per le pagine Interesting Con l’appellativo Interesting si vogliono indicare le pagine costituite da JavaScript benchmark. Gli strumenti di JavaScript benchmark consentono di testare, verificare e confrontare le performance JavaScript dei vari web browser. I benchmark racchiudono in s` diverse e prove per testare le prestazioni JavaScript del browser in uso: calcoli matematici, velocit` a di accesso agli oggetti e alle loro propriet`, utilizzo di regexp, string processing ecc. a Per lo studio in esame sono stati scelti i JavaScript benchmark rilasciati dai tre mag- giori produttori di web browser: V8 Benchmark, Dromaeo e SunSpider rispettivamente distribuiti da Google, Mozilla e WebKit. 3.2 Metodologia di scaricamento delle pagine Prima mettere in luce la metodologia di scaricamento adottata, vengono proposte due serie di definizioni utili al fine della totale comprensione lungo il prosieguo di tutto l’elaborato. La prima sequenza presenta alcune nozioni a carattere generale mentre la seconda espone dei concetti nati in seno al laboratorio di “Reti di Calcolatori” dell’Universit` di a Trieste, nel quale ` stata condotta questa ricerca. e 3.2.1 Definizioni generali • URL: Uniform Resource Locator ` una sequenza di caratteri che identifica uni- e vocamente l’indirizzo di una risorsa in Internet. Esso si compone di cinque parti, alcune delle quali sono opzionali: – nome del protocollo: protocollo di rete da utilizzare per l’accesso al server. I protocolli pi` comuni sono l’HTTP, HTTPS, FTP; u – id e password: credenziali per l’accesso alla risorsa; – nome del server: indirizzo fisico del server su cui risiede la risorsa. Pu` o essere costituito da un nome di dominio o da un Indirizzo IP; 2 Internet Service Provider : struttura commerciale o organizzazione che offre ai propri utenti servizi inerenti Internet come l’accesso alla network stessa e la posta elettronica.
  • 30. 3. Il dataset 16 – numero della porta: numero associato ad un servizio che permette al server di sapere quale tipo di risorsa ` richiesta; e – percorso di accesso alla risorsa: percorso nel file system del server che identifica la risorsa. • HTTP Request: insieme di linee inviate dal client al server per prelevare la risorsa. Essa comprende: – request line: ` una linea che precisa l’url del documento richiesto, il metodo e che deve essere applicato (GET o POST) per ottenere la risorsa e la versione del protocollo usato; – header lines: insieme di linee facoltative che permettono di dare delle informazioni supplementari sulla richiesta; – entity body: insieme di linee opzionali, separate dalle headers line tramite una linea vuota, che consentono l’invio di dati al server qualora il metodo specificato nella request line sia di tipo POST. • HTTP Response: insieme di linee inviate dal server al client. Essa comprende: – status line: ` una linea che precisa la versione del protocollo usata, lo stato e di trattamento della richiesta attraverso un codice e un testo esplicativo del codice; – header lines: insieme di linee facoltative che permettono di dare delle informazioni supplementari sulla risposta; – entity body: documento richiesto dal client. • HTTP Redirection: redirezione verso un nuovo URL associato al documento. Il nuovo url ` specificato nell’header Location dell’HTTP response. e 3.2.2 Nostre definizioni • Risorsa: pagina web visualizzabile tramite web browser. Ogni risorsa ` associata e ad un URL. Nel caso la risorsa sia un documento HTML, essa include anche tutte le informazioni necessarie al browser per la sua visualizzazione (script JavaScript, frame, iframe, immagini, CSS); • Snapshot: contenuto di una risorsa di URL u in un dato istante di tempo t; con contenuto si indicano tutti gli header ottenuti, sia di request che di response, il content type, la data e la durata del download e l’albero delle ricorrenze, il quale include: – l’html della pagina per la quale si ` avviato il download (root html); e – l’html ottenibile dagli URL indicati nell’attributo src dei tag iframe o frame della root html o di altri child html (child html);
  • 31. 17 Dimensione complessiva del dataset – gli script JavaScript ottenibili dagli URL indicati nell’attributo src dei tag script della root html o dei child html; – i css ottenibili dagli URL indicati nell’attributo src dei tag link della root html o dei child html; – i css ottenibili dagli URL indicati nella direttiva @import di altri css; – le immagini ottenibili dagli URL indicati nell’attributo src dei tag img della root html o dei child html; – le immagini ottenibili dagli URL specificati con le direttive background e background-image dei css. 3.2.3 Goldrake Per dar luogo allo scaricamento ` stato utilizzato il componente downloader di un’istanza e di Goldrake, sistema sviluppato presso il laboratorio di “Reti di Calcolatori”del DEEI dell’Universit` di Trieste, capace di garantire un controllo, periodico e automatizzato, a di siti remoti. Tale strumento, a partire dall’url della risorsa, immagazzina in un database relazio- nale lo snapshot di quella. Per costruire l’albero delle dipendenze, il programma analizza in maniera ricorsiva la pagina iniziale e le dipendenze della stessa utilizzando una serie di sensori. 3.3 Dimensione complessiva del dataset A conclusione del periodo di scaricamento delle pagine, durato pressoch` due mesi, la e composizione del dataset risultava cos` partizionata: ı • 834 pagine Normal ; • 200 pagine Malicious; • 3 pagine Interesting.
  • 32.
  • 33. Capitolo 4 Metodologia di analisi Una volta ottenuto il dataset, come spiegato al capitolo 3, si ` proceduto con l’orga- e nizzazione e la preparazione dei dati, al fine di poter avviare l’analisi fulcro di questa tesi. Poich´ la materia di studio ` rappresentata da script JavaScript, frame e iframe, la e e mole di dati legati agli snapshot forniti dal downloader di Goldrake, ` stata sottoposta ad e una selezione tesa ad estrapolare il complesso di informazioni inerenti, appunto, script, frame e iframe. A questo primo scorporamento ` seguita la riorganizzazione dei dati per porli nel e formato pi` consono all’analisi. u 4.1 Suddivisione del dataset Dall’albero delle dipendenze di ogni pagina sottoposta a scaricamento, sono stati estra- polati i dati d’interesse per la nostra indagine. Con tali elementi ` stato popolato un e ulteriore database. La struttura del DB sopracitato, pu` essere descritta semplificandola e riassumendola o in due tabelle, una associata agli script JavaScript e una ai frame e agli iframe. 4.1.1 La tabella degli script Per ogni script JavaScript, collegato in qualche misura a una risorsa, ` stata inserita una e riga in una tabella Ts , costituita dai seguenti campi: • Script URL: url dello script; • Root page URL: url della pagina per la quale si ` avviato il download; e • Root page type: tipologia della pagina (Normal, Malicious o Interesting); • Script body: codice contenuto nello script; 19
  • 34. 4. Metodologia di analisi 20 • Category: categoria di appartenenza dello script, una fra le seguenti: – Embedded Script: script identificato da un tag HTML <script> che non include l’attributo src (un inline script); – Child Script: script identificato da un tag HTML <script> che include l’attributo src e che quindi non contiene il codice dello script ma solo il puntatore all’indirizzo dove quello deve essere prelevato; – Intrinsic Event: script definito all’interno di un tag HTML come <onload>, <onclick>, <onsubmit>, <onchange>, <onfocus>, <onmouseover>, e cos` via. ı • Locality: campo booleano che, a seconda del valore, conferisce allo script una delle seguenti accezioni: – Local: qualora lo Script URL e il Root page URL condividano almeno gli ultimi due livelli del nome DNS1 ; – Remote: altrimenti. • List of HTTP redirection for the script: lista degli URL appartenenti alla sequenza di download dello script. Tale lista include anche tutte le redirezioni HTTP e mantiene l’ordine di scaricamento degli URL; • Total steps: numero degli elementi della lista sopra menzionata; • Inclusion steps: risultato della sottrazione delle redirezioni HTTP al numero identificato come Total steps. Il concetto pu` essere pi` chiaro con l’esempio successivo. Si consideri un Child o u Script, quindi uno script il cui codice ` definito all’esterno della pagina web di e cui si ` avviato lo scaricamento. La lista degli URL appartenenti alla sequenza e di download dello script contiene l’URL della pagina principale e l’URL puntato dall’attributo src del tag <script>. In questo specifico caso lo script ` caratte- e rizzato da Total steps=2 e Inclusion steps=2 perch` durante il percorso non si e sono riscontrate redirezioni HTTP. Si consideri ora lo stesso esempio ma nella si- tuazione in cui la richiesta HTTP inoltrata dal client al server per prelevare tale script all’URL puntato, riceva una risposta HTTP con il campo Location settato; nell’header Location ` precisato il nuovo url da cui prelevere lo script richiesto. In e questo caso il client subisce una redirezione e lo script risulta esser caratterizzato da Total steps=3 e Inclusion steps=2. A seconda delle combinazioni dei campi Category e Locality, gli script sono stati raggruppati in sei diverse classi. Come verr` meglio illustrato nei capitoli seguenti, per a molte analisi ci si ` avvalsi di questa suddivisione. e 1 ` DNS : Domain Name System, sistema di denominazione del dominio. E un database distribuito che viene utilizzato per creare una corrispondenza tra indirizzo IP e nome mnemonico assegnato a un nodo.
  • 35. 21 Suddivisione del dataset 4.1.1.1 Lo script: dalla pagina alla tabella In questo paragrafo si descrive un esempio relativo al download di una pagina web, www.amazon.com, con successiva estrazione degli script contenuti in essa e popolamento della tabella Ts . L’url di cui si avvia lo scaricamento ` la home page del sito www.amazon.com, che, e visualizzata tramite un browser, appare all’utente come in Figura 4.1 a pagina 22. Una volta terminato lo scaricamento, si evince che la pagina ` formata da 32 Embed- e ded Script, 7 Child Script e 4 Intrinsic Event. Nel seguito si elencano i valori dei campi della riga inserita in Ts e relativa al primo Embedded Script scaricato dalla pagina. • Script URL: http://www.amazon.com; • Root page URL: http://www.amazon.com; • Root page type: Normal; • Script body: 1 <! -- 2 function amz_js_PopWin ( url , name , options ) { 3 var ContextWindow = window . open ( url , name , options ) ; 4 ContextWindow . focus () ; 5 return false ; 6 } 7 // -- > Codice 4.1: Codice dello script • Category: Embedded Script; • Locality: Local; • List of HTTP redirection for the script: – http://www.amazon.com; • Total steps: 1; • Inclusion steps: 1; Per maggior chiarezza si riportano anche i dati d’interesse appartenenti al primo Child Script scaricato dalla pagina. • Script URL: http://m1.2mdn.net/879366/flashwrite 1 2.js; • Root page URL: http://www.amazon.com; • Root page type: Normal;
  • 36. 4. Metodologia di analisi 22 Figura 4.1: Home page di Amazon visualizzata tramite un browser • Script body: 1 function dclkToObject ( id ) { 2 if ( document . layers ) { 3 return ( document . layers [ id ]) ? eval ( document . layers [ id ]) : null ; 4 } 5 else if ( document . all && ! document . getElementById ) { 6 return ( eval ( " window . " + id ) ) ? eval ( " window . " + id ) : null ; 7 } 8 else if ( document . getElementById && document . body . style ) { 9 return ( document . getElementById ( id ) ) ? eval ( document . getElementById ( id ) ) : null ; 10 } 11 } 12 13 function dclkFlashWrite ( string ) { 14 document . write ( string ) ; 15 } 16 17 function d cl kF la shI nn er HT ML ( htmlElementId , code ) { 18 var x = dclkToObject ( htmlElementId ) ; 19 if ( x ) { 20 if ( document . getElementById || document . all ) { 21 x . innerHTML = ’ ’; 22 x . innerHTML = code ;
  • 37. 23 Suddivisione del dataset 23 } 24 else if ( document . layers ) { 25 x . document . open () ; 26 x . document . write ( code ) ; 27 x . document . close () ; 28 } 29 } 30 } Codice 4.2: Codice dello script • Category: Child Script; • Locality: Remote; • List of HTTP redirection for the script: – http://www.amazon.com – http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;u=7689... ;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;s=m1;z=1;tile=3? – http://ad.doubleclick.net/adi/N624.160337.0447968804521/B3948491;sz=300x250; click=http://ad.doubleclick.net/click%3Bh=v8/38c1/3/0/%2a/a%3B132905229% 3B0-0%3B0%3B18273354%3B4307-300/250%3B33661023/33678901/1%3Bu% 3D768289f015614a40a75c747a2f702ea3%3B%7Eaopt%3D2/1/4/2%3B%7Esscs% 3D%3f;ord=2385959? – http://m1.2mdn.net/879366/flashwrite 1 2.js • Total steps: 4; • Inclusion steps: 4; 4.1.2 La tabella dei frame e degli iframe Analogamente alla tabella Ts , ` stata popolata anche una tabella Ti relativa ai frame e e agli iframe reperiti analizzando i tag HTML <frame> e <iframe> riscontrati nelle sequenza di download di ogni risorsa. Di seguito viene presentata la descrizione dei campi della tabella Ti : • Iframe URL: url del frame o dell’iframe; • Root page URL: url della pagina per la quale si ` avviato il download; e • Root page type: tipologia della pagina (Normal, Malicious o Interesting); • Iframe body: codice contenuto fra le coppie di tag HTML <frame>. . . e . . . </frame> o <iframe>. . . e . . . </iframe>; • Enclosing: tipo di inclusione del frame o dell’iframe, una fra le seguenti:
  • 38. 4. Metodologia di analisi 24 – HTML Embedded: frame o iframe incluso all’interno del codice HTML di una pagina; – Script Embedded: frame o iframe incluso all’interno del codice JavaScript di uno script. • Locality: campo booleano che, a seconda del valore, conferisce al frame o all’ifra- me una delle seguenti accezioni: – Local: qualora l’Iframe URL e il Root page URL condividano almeno gli ultimi due livelli del nome DNS; – Remote: altrimenti. • List of HTTP redirection for the iframe: lista degli URL appartenenti alla sequenza di download del frame o dell’iframe. Tale lista include anche tutte le redirezioni HTTP e mantiene l’ordine di scaricamento degli URL; • Total steps: numero degli elementi della lista sopra menzionata; • Inclusion steps: risultato della sottrazione delle redirezioni HTTP al numero identificato come Total steps. Nelle nostre analisi i frame e gli iframe sono stati classificati in base ai quattro gruppi scaturiti dalle combinazioni dei campi Enclosing e Locality. 4.1.2.1 L’iframe: dalla pagina alla tabella Sempre a seguito del download della pagina www.amazon.com (Figura 4.1), la tabella Ti ` stata popolata con cinque iframe: 3 del tipo Embedded e 2 del tipo Script Embedded. e Nel seguito si elencano i valori dei campi della riga inserita in Ti e relativa al primo iframe HTML Embedded della pagina. • Iframe URL: http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846; u=768289f015614a40a75c747a2f702ea3;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4; s=m1;z=1;tile=3?; • Root page URL: http://www.amazon.com; • Root page type: Normal; • Iframe body: 1 < iframe xmlns = " http :// www . w3 . org /1999/ xhtml " bordercolor = " #000000 " frameborder = " 0 " height = " 250 " hspace = " 0 " marginheight = " 0 " marginwidth = " 0 " scrolling = " no " src = " http :// ad . doubleclick . net / adi / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; sz =300 x250 ; click = http :// ad . doubleclick . net / click %3 Bh = v8 /38 c1 /3/0/%2 a / a %3 B132905229 %3 B0 -0%3 B0 %3 B18273354 %3 B4307 -300/250%3 B33661023 /33678901/1%3 Bu %3
  • 39. 25 Analisi sugli script e sugli iframe D 7 6 8 2 8 9 f 0 1 5 6 1 4 a 4 0 a 7 5 c 7 4 7 a 2 f 7 0 2 e a 3 %3 B %7 Eaopt %3 D2 /1/4/2%3 B %7 Esscs %3 D %3 f ; ord =2385959? " vspace = " 0 " width = " 300 " > & lt ; SCRIPT language = ’ JavaScript1 .1 ’ SRC = " http :// ad . doubleclick . net / adj / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie ; sz =300 x250 ; ord =2385959? " & gt ; & lt ;/ SCRIPT & gt ; & lt ; NOSCRIPT & gt ; & lt ; A HREF = " http :// ad . doubleclick . net / jump / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie4 ; abr =! ie5 ; sz =300 x250 ; ord =2385959? " & gt ; & lt ; IMG SRC = " http :// ad . doubleclick . net / ad / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie4 ; abr =! ie5 ; sz =300 x250 ; ord =2385959? " BORDER =0 WIDTH =300 HEIGHT =250 ALT = " " Click Here " " & gt ;& lt ;/ A & gt ; & lt ;/ NOSCRIPT & gt ; </ iframe > Codice 4.3: Codice dell’iframe • Enclosing: HTML Embedded; • Locality: Remote; • List of HTTP redirection for the iframe: – http://www.amazon.com; – http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;u=7689... ;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;s=m1;z=1;tile=3?; • Total steps: 2; • Inclusion steps: 2; 4.2 Analisi sugli script e sugli iframe Una volta ottenute le informazioni sulle “generalit`” di script, frame e iframe, si ` deciso a e di analizzarne il contenuto e quindi scendere a livello del codice per ricavarne gli apetti salienti e poter soddisfare l’intento di fornirne una caratterizzazione complessiva. A tal scopo sono stati definiti due set di propriet` da estrarre e da misurare, il primo a peculiare per gli script, il secondo per i frame e gli iframe. 4.2.1 Propriet` estratte dagli script a L’obiettivo prefisso nella definizione delle propriet`, si individua nell’esigenza di svisce- a rare il singolo script al fine di esaminarne le componenti, quali le funzioni definite dal programmatore, le funzioni native JavaScript come, ad esempio, eval() e unescape(), i document.write(), gli iframe e le variabili. Nel seguito viene delineato l’elenco delle propriet` estratte per ogni script. a • Function name: nome di ogni funzione definita nello script;
  • 40. 4. Metodologia di analisi 26 • Document.write: argomento di ogni invocazione di tipo document.write(); • Iframe: argomento racchiuso fra i tag HTML <iframe>. . . e . . . </iframe>; • Variable name: nome di ogni variabile definita nello script; • Variable content: contenuto di ogni variabile definita nello script; • Long string: contenuto di ogni stringa costante di dimensione superiore ai 140 caratteri definita nello script; • Eval: argomento di ogni invocazione di tipo eval(); • Unescape: argomento di ogni invocazione di tipo unescape(); • Decode: argomento di ogni invocazione di tipo decode(); • Onerror: argomento di ogni invocazione di tipo onerror(); • Exec: argomento di ogni invocazione di tipo exec(); • String.fromCharCode: argomento di ogni invocazione di tipo String.fromCharCode(); • String.charCodeAt: argomento di ogni invocazione di tipo String.charCodeAt(); • Math.random: argomento di ogni invocazione di tipo Math.random(); 4.2.2 Propriet` estratte dai frame e dagli iframe a Per ci` che concerne i frame i gli iframe le propriet` estratte si riassumono nelle dimen- o a sioni degli stessi: • width: valore che specifica la larghezza del frame o dell’iframe; • height: valore che specifica l’altezza del frame o dell’iframe; Le propriet` elencate in questi due paragrafi si pongono come nucleo fondante per a le nostre analisi. Esse sono state analizzate sotto vari aspetti a seconda delle esigenze: talvolta ne ` stato considerato il numero di occorrenze, talatra ` stato preso in considera- e e zione il valore insito nella propriet` o, ancora, ci si ` soffermati sul risultato di particolari a e elaborazioni effettuate su quei valori.
  • 41. Capitolo 5 Offuscamento Lungo questo capitolo viene trattato un tema complicato e caratterizzato da aspetti su cui attualmente non ` ancora stata fatta completa chiarezza: l’offuscamento. Codesto e argomento ha impiegato una parte consistente di tempo dedicato a questa ricerca. Il capitolo ` essenzialmente suddiviso in quattro sezioni. e Nella prima viene esposto il concetto di offuscamento cos` come trattato in lettera- ı tura. Vengono elencate le motivazioni alla base dell’offuscamento del codice e vengono forniti alcuni esempi. Quindi il focus del capitolo passa nello specifico all’offuscamento come tecnica per ce- lare contenuti maligni. In questa parte viene definito e analizzato anche l’uso di eval(). Infatti, il concetto di offuscamento ` sovente accumunato a tale funzione JavaScript. e Nella terza parte del capitolo viene dato spazio al tema degli iframe sospettosamente “piccoli” se non adirittura invisibili. In tale sezione viene spiegato il rapporto che sussiste fra questa tipologia di iframe e l’offuscamento; al lettore risulter` quindi chiara la scelta a di inserire l’argomento all’interno di questo capitolo. Infine, viene esposto il nostro approccio al problema. Viene illustrata la metodologia di analisi tesa alla caratterizzazione dell’offuscamento degli script presenti nel nostro dataset (quasi 54 mila). L’obiettivo di questa fase dello studio ` consistito nel fornire degli strumenti per e poter rispondere agli ultimi tre macroquesiti introdotti al paragrafo 2.6.1 di pagina 12. 5.1 Definizione di offuscamento Come gi` anticipato nella sezione 2.6 a pagina 10, nonostante non esista una definizione a precisa del concetto di offuscamento, si pu` asserire che un codice offuscato ` un codice o e sorgente1 o macchina2 che ` stato intenzionalmente modificato per essere reso difficil- e 1 Codice sorgente: insieme di istruzioni scritte dal programmatore per realizzare un programma. 2 Codice macchina: insieme di istruzioni binarie direttamente eseguibili dalla macchina. Se il codice sorgente ` scritto con un linguaggio ad alto livello, per essere eseguito dev’essere tradotto in codice e macchina. 27
  • 42. 5. Offuscamento 28 mente comprensibile sia da un analista umano che da un programma la cui finalit` sia a quella di effettuare il reverse engineering 3 , ossia di impedire di risalire all’algoritmo alla base del codice. Gli scopi che spingono un programmatore ad offuscare il proprio codice sono para- dossalmente opposti. Da un lato, il ricorso alla code obfuscation ` volto alla protezione e del sorgente, quindi prevenire il reverse engineering, in modo tale da impedirne il plagio e la contraffazione. D’altro canto, invece, l’offuscamento pu` essere impiegato per celare o codice maligno con finalit` biasimevoli. a 5.2 Programmi atti all’offuscamento I programmi che trasformano il codice “human-readable” in codice offuscato si defini- scono obfuscators. Essi differiscono a seconda del linguaggio trattato e delle tecniche utilizzate per il loro scopo. Inoltre, questi programmi vengono classificati in base a tre parametri: • Potenza: indica il grado di offuscamento raggiunto dal codice in seguito alla trasformazione; • Resilienza: indica il grado di resistenza del codice offuscato contro un attacco da parte di uno strumento che opera la trasformazione inversa; • Costo: indica l’overhead4 aggiunto all’applicazione originale. 5.3 Programmi per offuscare codice JavaScript Compiendo una rapida ricerca in rete, si pu` osservare che esiste un numero ingen- o te di programmi appartenenti alla categoria JavaScript obfuscator. Essi provvedono all’offuscamento automatico di codice JavaScript. Solitamente questi programmi intervengono sul codice in esame compiendo tutte o quasi le seguenti operazioni: • eliminazione dei commenti; • eliminazione degli spazi inutili; • rinomina delle funzioni; • rinomina dei parametri; 3 Reverse engineering: processo mediante il quale si cerca di scoprire i principi sui quali si basa un dispositivo, un software o un qualsiasi prodotto finito attraverso l’analisi della sua struttura, delle funzionalit` e delle operazioni che questo svolge. a 4 Overhead : con questo termine si definiscono le risorse accessorie, richieste in sovrappi` rispetto u a quelle strettamente necessarie, per ottenere un determinato scopo in seguito all’introduzione di un metodo o di un processo pi` evoluto o pi` generale. u u
  • 43. 29 Programmi per offuscare codice JavaScript • rinomina delle variabili; • rinomina dei metodi; • accorpamento del codice in un’unica riga; • compressione del codice. 5.3.1 Primo esempio di funzionamento di un JavaScript obfuscator Il primo esempio, volto a chiarire il funzionamento di un JavaScript obfuscator, ` preso e dal sito di un programma che compie la menzionata trasformazione sul codice [7]. 1 function foo ( arg1 ) 2 { 3 var myVar1 = " some string " ; // first comment 4 var intVar = 24*3600; // second comment 5 /* here is 6 a long 7 multi - line comment */ 8 document . write ( " vars are : " + myVar1 + " " + intVar + " " + arg1 ) ; 9 } Codice 5.1: Frammento di codice JavaScript da offuscare Quando il JavaScript obfuscator in questione effettua il parsing del codice, vengono eliminati gli spazi, i commenti e gli accapo. Inoltre, i nomi di funzioni, i parametri e le varibili vengono rimpiazzati con stringhe composte casualmente, ai valori degli inte- ri subentrano equazioni complesse, mentre le stringhe da visualizzare a schermo sono sostituite dai loro valori esadecimali. Il risultato ottenuto ` il seguente: e 1 function z001c775808 ( z3833986e2c ) { var z0d8bd8ba25 = " x73 x6f x6d x65 x20 x73 x74 x72 x69 x6e x67 " ; var z0ed9bcbcc2 =(0 x90b +785 -0 xc04 ) *(0 x1136 +6437 -0 x1c4b ) ; document . write ( " x76 x61 x72 x73 x20 x61 x72 x65 x3a " + z0d8bd8ba25 + " x20 " + z0ed9bcbcc2 + " x20 " + z3833986e2c ) ;} Codice 5.2: Stesso frammento di codice JavaScript dopo l’offuscamento Si elencano le sostituzioni apportate nelle tre categorie: • nomi di funzioni, parametri e variabili definiti dall’utente: – foo ` sostituito con z001c775808; e – arg1 ` sostituito con z3833986e2c; e – myvar1 ` sostituito con z0d8bd8ba25; e – intvar ` sostituito con z0ed9bcbcc2; e • valori di numeri interi:
  • 44. 5. Offuscamento 30 – 20 ` sostituito con (0x90b+785-0xc04); e – 3600 ` sostituito con (0x1136+6437-0x1c4b); e • stringhe da visualizzare a schermo: – vars are ` sostituita con x76x61x72x73x20x61x72x65x3a; e – gli spazi sono sostituiti con x20. 5.3.2 Secondo esempio di funzionamento di un JavaScript obfuscator In questo paragrafo si riporta un ulteriore esempio di codifica del codice operato da un altro JavaScript obfuscator (l’esempio ` tratto dal sito del programma stesso [8]). e Il seguente codice javascript calcola lo stipendio di ogni impiegato presente nella lista “aEmployees” di oggetti “Employees”. Questo esempio di offuscamento rientra nella prima tipologia di utilizzi citati nella sezione 5.1, infatti, gli scopi principali sono la protezione e la compressione del codice. 1 function CalculateSalary ( aEmployees ) 2 { 3 var nEmpIndex = 0; 4 while ( nEmpIndex < aEmployees . length ) 5 { 6 var oEmployee = aEmployees [ nEmpIndex ]; 7 oEmployee . fSalary = C a l cu l a te B a se S a la r y ( oEmployee . nType , 8 oEmployee . nWorkingHours ) ; 9 if ( oEmployee . bBonusAllowed == true ) 10 { 11 oEmployee . fBonus = C a l c u l a t e B o n u s S a l a r y ( oEmployee . nType , 12 oEmployee . nWorkingHours , 13 oEmployee . fSalary ); 14 } 15 else 16 { 17 oEmployee . fBonus = 0; 18 } 19 oEmployee . sSalaryColor = GetSalaryColor ( oEmployee . fSalary + 20 oEmployee . fBonus ) ; 21 nEmpIndex ++; 22 } 23 } Codice 5.3: Frammento di codice JavaScript da offuscare Dando in pasto questo codice al JavaScript obfuscator, ci` che ne risulta ` il successivo o e frammento:
  • 45. 31 JavaScript come veicolo di contenuti maligni 1 function c ( g ) { var m =0; while ( m <g . length ) { var r = g [ m ]; r . l = d ( r .n , r . o ) ; if ( r . j == true ) { r . k = e ( r .n , r .o , r . l ) ;} else { r . k =0;} r . t = f ( r . l + r . k ) ; m ++;}} Codice 5.4: Stesso frammento di codice JavaScript dopo l’offuscamento 5.4 JavaScript come veicolo di contenuti maligni Se, come detto precedentemente, la presenza di una porzione di codice offuscato non implica che quel codice sia necessariamente infetto, ` comunque ragionevole ritenere che e chi scriva del codice con contenuto maligno sia portato ad offuscarlo. Per questo motivo, nel seguito, si delinea un elenco di attacchi che possono essere effettuati anche tramite codice JavaScript. • Denial of Service: l’attacco DoS cerca di portare il funzionamento di un server al limite delle prestazioni, fino a renderlo non pi` in grado di erogare il servizio. u Script JavaScript possono essere utilizzati dall’attaccante, per spedire una mole cos` ingente di richieste al server tale da metterlo fuori uso; ı • Cross-Site-Scripting: l’attacco definito anche XSS, appartiene alla tipologia injection, si tratta, quindi, di immissione di codice arbitrario in input alle pagine web. Il cross-site scripting consente di accedere a informazioni sensibili, rubare dati di sessione degli utenti, compromettere i browser web che essi utilizzano o, ancor peggio, l’integrit` del sistema su cui tali browser stanno eseguendo. a Gli attacchi alle vulnerabilit` XSS hanno effetti dirompenti per i siti con un ele- a vato numero di utenti, dato che ` sufficiente una sola compromissione per colpire e chiunque visiti la stessa pagina. Il primo passo di un attaccante sta nell’upload del proprio script malevolo all’in- terno del sito web designato ad ospitarlo. Il codice malevolo pu` essere inserito nel o sito: – deliberamente poich´ l’attaccante ne ` il proprietario; e e – sfruttando una vulnerabilit` del sistema operativo, o di livello Network o di a una delle zone del sito stesso. • Phishing: questo attacco mira ad ottenere l’accesso a informazioni personali o riservate tramite messaggi di posta elettronica che imitano grafica e logo dei siti istituzionali. L’email maligna indirizza il destinatario verso un sito web fasullo (apparentemente identico a quello fidato) che esorta la vittima a fornire informa- zioni riservate come codice fiscale, numero di conto corrente, numero di carta di credito e codici di identificazione.